Pagini recente » Cod sursa (job #2802728) | Cod sursa (job #2309833) | Cod sursa (job #992467) | Cod sursa (job #596282) | Cod sursa (job #1794707)
#include<stdio.h>
#define MOD 666013
FILE *in, *out;
struct matrice
{
long long a, b, c, d;
};
matrice inmult(matrice x, matrice y)
{
matrice z;
z.a = ((x.a * y.a) % MOD + (x.b * y.c) % MOD) % MOD;
z.b = ((x.a * y.b) % MOD + (x.b * y.d) % MOD) % MOD;
z.c = ((x.c * y.a) % MOD + (x.d * y.c) % MOD) % MOD;
z.d = ((x.c * y.b) % MOD + (x.d * y.d) % MOD) % MOD;
return z;
}
matrice expmat(matrice x, int n)
{
if(n == 1) {
return x;
}
matrice y = expmat(x, n / 2);
//printf("XXXX %d %d %d %d YYYY %d %d %d %d NNN %d\n", x.a, x.b, x.c, x.d, y.a, y.b, y.c, y.d, n);
if(n & 1) {
return inmult(inmult(y, y), x);
} else {
return inmult(y, y);
}
}
int main ()
{
in = fopen("kfib.in", "r");
out = fopen("kfib.out", "w");
int f;
fscanf(in, "%d", &f);
//printf("%d", f);
matrice baz;
baz.a = 0;
baz.b = 1;
baz.c = 1;
baz.d = 1;
baz = expmat(baz, f - 2);
fprintf(out, "%lld", (baz.b + baz.d) % MOD);
fclose(in);
fclose(out);
return 0;
}