Pagini recente » Cod sursa (job #231797) | Cod sursa (job #2823209) | Cod sursa (job #2211157) | Cod sursa (job #218083) | Cod sursa (job #2293251)
#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;
//initializare(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);
g << a.m[2][2];
return 0;
}