Pagini recente » Cod sursa (job #1891648) | Cod sursa (job #1076052) | Cod sursa (job #1567477) | Cod sursa (job #1423942) | Cod sursa (job #434028)
Cod sursa(job #434028)
#include <stdio.h>
#define LMAX 3
#define MOD 666013
#define ll long long
int k,rez[LMAX][LMAX],part[LMAX][LMAX],mat[LMAX][LMAX];
void precompute()
{
rez[1][1]=0; rez[1][2]=1;
part[1][1]=1; part[2][2]=1;
mat[1][2]=1; mat[2][1]=1; mat[2][2]=1;
}
void mul(int A[][LMAX],int B[][LMAX])
{
int i,j,k,C[LMAX][LMAX];
ll p;
for (i=1; i<=2; i++)
for (j=1; j<=2; j++)
{
p=0;
for (k=1; k<=2; k++)
p+=(ll)A[i][k]*B[k][j];
if (p>=MOD)
p%=MOD;
C[i][j]=p;
}
for (i=1; i<=2; i++)
for (j=1; j<=2; j++)
A[i][j]=C[i][j];
}
void lgput()
{
while (k)
{
if (k & 1)
mul(part,mat);
mul(mat,mat);
k>>=1;
}
}
int main()
{
freopen("kfib.in","r",stdin);
freopen("kfib.out","w",stdout);
scanf("%d",&k);
precompute();
lgput();
mul(rez,part);
printf("%d\n",rez[1][1]);
return 0;
}