Pagini recente » Cod sursa (job #1650001) | Cod sursa (job #1303360) | Cod sursa (job #838195) | Cod sursa (job #2301239) | Cod sursa (job #1668588)
#include <stdio.h>
#include <stdlib.h>
#define MOD 666013
long long F[2][2]={{1,1},{1,0}};
long long fib(int n){
if(n==0)
return 0;
power(n-1);
return F[0][0];
}
void power(int n){
if( n != 0 && n != 1){
long long M[2][2] = {{1,1},{1,0}};
power(n/2);
multiply(F);
if(n%2!=0)
multiply(M);
}
}
void multiply(long long M[2][2]){
long long x, y, z, w;
x = (F[0][0]*M[0][0] + F[0][1]*M[1][0])%MOD;
y = (F[0][0]*M[0][1] + F[0][1]*M[1][1])%MOD;
z = (F[1][0]*M[0][0] + F[1][1]*M[1][0])%MOD;
w = (F[1][0]*M[0][1] + F[1][1]*M[1][1])%MOD;
F[0][0] = x;
F[0][1] = y;
F[1][0] = z;
F[1][1] = w;
}
int main()
{
int k;
FILE*fi,*fo;
fi=fopen("kfib.in","r");
fo=fopen("kfib.out","w");
fscanf(fi,"%d", &k);
fprintf(fo,"%lld", fib(k));
fclose(fi);
fclose(fo);
return 0;
}