Pagini recente » Cod sursa (job #2711416) | Cod sursa (job #335222) | Cod sursa (job #1554293) | Cod sursa (job #2837093) | Cod sursa (job #1533478)
#include <stdio.h>
#include <stdlib.h>
#define MOD 666013
long long rez[5][5], rezc[5][5], i[5][5], ic[5][5];
int main(){
FILE*fin=fopen("kfib.in", "r");
FILE*fout=fopen("kfib.out", "w");
int k;
fscanf(fin, "%d", &k);
rez[1][1]=rez[2][2]=1;
i[1][2]=i[2][1]=i[2][2]=1;
rezc[1][1]=rezc[2][2]=1;
ic[1][2]=ic[2][1]=ic[2][2]=1;
k-=2;
while(k>0){
if(k%2==1){
rez[1][1]=rezc[1][1]*i[1][1]+rezc[1][2]*i[2][1];
rez[1][2]=rezc[1][1]*i[1][2]+rezc[1][2]*i[2][2];
rez[2][1]=rezc[2][1]*i[1][1]+rezc[2][2]*i[2][1];
rez[2][2]=rezc[2][1]*i[1][2]+rezc[2][2]*i[2][2];
k--;
}
else{
k/=2;
i[1][1]=ic[1][1]*ic[1][1]+ic[1][2]*i[2][1];
i[1][2]=ic[1][1]*ic[2][1]+ic[1][2]*i[2][2];
i[2][1]=ic[2][1]*ic[1][1]+ic[2][2]*i[2][1];
i[2][2]=ic[2][1]*ic[2][1]+ic[2][2]*i[2][2];
}
rez[1][1]%=MOD; rez[1][2]%=MOD; rez[2][1]%=MOD; rez[2][2]%=MOD;
i[1][1]%=MOD; i[1][2]%=MOD; i[2][1]%=MOD; i[2][2]%=MOD;
rezc[1][1]=rez[1][1]; rezc[1][2]=rez[1][2]; rezc[2][1]=rez[2][1]; rezc[2][2]=rez[2][2];
ic[1][1]=i[1][1]; ic[1][2]=i[1][2]; ic[2][1]=i[2][1]; ic[2][2]=i[2][2];
}
// printf("%d %d\n%d %d", rez[1][1], rez[1][2], rez[2][1], rez[2][2]);
fprintf(fout, "%lld", (rez[2][2]+rez[1][2])%MOD);
return 0;
}