Pagini recente » Cod sursa (job #2938921) | Cod sursa (job #911771) | Cod sursa (job #154268) | Cod sursa (job #3038465) | Cod sursa (job #1799060)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("kfib.in");
ofstream g("kfib.out");
const int MOD = 666013;
int k;
struct matrice{
long long int a, b, c, d;
} m, z, I2;
matrice inmultire(matrice m1, matrice m2) {
matrice r;
r.a = ((m1.a * m2.a) % MOD + (m1.b * m2.c) % MOD) % MOD;
r.b = ((m1.a * m2.b) % MOD + (m1.b * m2.d) % MOD) % MOD;
r.c = ((m1.c * m2.a) % MOD + (m1.d * m2.c) % MOD) % MOD;
r.d = ((m1.c * m2.b) % MOD + (m1.d * m2.d) % MOD) % MOD;
return r;
}
matrice putere(matrice &m, int k) {
matrice n = I2;
while (k > 0)
if (k % 2 == 0) {
z = inmultire(z, z);
k /= 2;
}
else {
n = inmultire(n, z);
k--;
}
return n;
}
int main()
{
f >> k;
m.a = 0; m.b = 1; m.c = 1; m.d = 1;
z.a = 0; z.b = 1; z.c = 1; z.d = 1;
I2.a = I2.d = 1;
I2.b = I2.c = 0;
m = putere(m, k - 1);
g << m.d;
return 0;
}