Pagini recente » Cod sursa (job #3328678) | Cod sursa (job #769964) | Borderou de evaluare (job #829788) | Cod sursa (job #714147) | Cod sursa (job #3357068)
#include <stdio.h>
const long long mod = 1999999973LL;
typedef struct {
unsigned int m[2][2];
} matrix2x2;
matrix2x2 matrixmult2x2(matrix2x2 x, matrix2x2 y) {
matrix2x2 r;
r.m[0][0] = x.m[0][0] * y.m[0][0] + x.m[0][1] * y.m[1][0];
r.m[0][1] = x.m[0][0] * y.m[0][1] + x.m[0][1] * y.m[1][1];
r.m[1][0] = x.m[1][0] * y.m[0][0] + x.m[1][1] * y.m[1][0];
r.m[1][1] = x.m[1][0] * y.m[0][1] + x.m[1][1] * y.m[1][1];
return r;
}
matrix2x2 explogz(matrix2x2 a, unsigned int n) {
matrix2x2 sol = {{{1, 0}, {0, 1}}};
for (unsigned int i = 0; (1 << i) <= n; ++i) {
if (((1 << i) & n) > 0)
sol = matrixmult2x2(sol, a);
a = matrixmult2x2(a, a);
}
return sol;
}
int main(void) {
FILE *in = fopen("kfib.in", "r");
FILE *out = fopen("kfib.out", "w");
unsigned int n;
fscanf(in, "%d", &n);
matrix2x2 a = {{{0, 1}, {1, 1}}};
a = explogz(a, n);
fprintf(out,"%d", a.m[1][1]);
return 0;
}