Pagini recente » Cod sursa (job #2622839) | Cod sursa (job #699577) | Cod sursa (job #459399) | Cod sursa (job #175679) | Cod sursa (job #2294462)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("kfib.in");
ofstream g("kfib.out");
struct matrice {
long long m[4][4];
};
const int MOD = 666013;
int k;
matrice inm(matrice a, matrice b) {
matrice c;
c.m[1][1] = c.m[1][2] = c.m[2][1] = c.m[2][2] = 0;
c.m[1][1] = ((a.m[1][1] * b.m[1][1]) + (a.m[1][2] * b.m[2][1])) % MOD;
c.m[1][2] = ((a.m[1][1] * b.m[1][2]) + (a.m[1][2] * b.m[2][2])) % MOD;
c.m[2][1] = ((a.m[1][1] * b.m[2][1]) + (a.m[2][2] * b.m[2][1])) % MOD;
c.m[2][2] = ((a.m[1][2] * b.m[2][1]) + (a.m[2][2] * b.m[2][2])) % MOD;
return c;
}
void putere(matrice &a, int b) {
matrice rez, ak = a;
rez.m[1][2] = rez.m[2][1] = 0;
rez.m[1][1] = rez.m[2][2] = 1;
while(b) {
if (b % 2) {
rez = inm(rez, ak);
}
ak = inm(ak, ak);
b /= 2;
}
a = rez;
}
void afisare(matrice a) {
g << a.m[1][1] << ' ' << a.m[1][2] << '\n';
g << a.m[2][1] << ' ' << a.m[2][2] << '\n';
g << '\n';
}
int main() {
f >> k;
matrice a;
a.m[1][1] = 0;
a.m[1][2] = 1;
a.m[2][1] = 1;
a.m[2][2] = 1;
putere (a, k - 1);
return 0;
}