Pagini recente » Cod sursa (job #1955214) | Cod sursa (job #2723458) | Cod sursa (job #578497) | Cod sursa (job #2688724) | Cod sursa (job #1791494)
#include<stdio.h>
#define MOD 666013
FILE*fin=fopen("kfib.in","r");
FILE*fout=fopen("kfib.out","w");
long long Z[2][2];
long long mat[2][2];
void inmultire(long long a[2][2],long long b[2][2])
{
long long rez[2][2];
rez[0][0]=rez[0][1]=rez[1][0]=rez[1][1]=0;
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
for(int k=0;k<2;k++)
{
rez[i][j]=(rez[i][j]%MOD+(a[i][k]%MOD*b[k][j]%MOD)%MOD)%MOD;
}
}
}
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
a[i][j]=rez[i][j];
}
}
void lgput(int n)
{
long long r[2][2];
r[0][0]=0;
r[0][1]=r[1][0]=r[1][1]=1;
while(n>1)
{
if(n%2==0)
{
inmultire(Z,Z);
n/=2;
}
else
{
inmultire(r,Z);
inmultire(Z,Z);
n/=2;
}
}
if(n==1)
inmultire(Z,r);
}
int main()
{
int K;
fscanf(fin,"%d",&K);
if(K==0)
{
printf("0");
return 0;
}
Z[0][1]=Z[1][0]=Z[1][1]=1;
lgput(K-1);
mat[0][1]=1;
inmultire(mat,Z);
fprintf(fout,"%lld",mat[0][0]);
return 0;
}