Pagini recente » Cod sursa (job #921593) | Cod sursa (job #1220252) | Cod sursa (job #2745023) | Cod sursa (job #2532542) | Cod sursa (job #805442)
Cod sursa(job #805442)
#include <iostream>
#include <stdio.h>
using namespace std;
FILE *f=fopen("kfib.in","r");
FILE *g=fopen("kfib.out","w");
int k,nr[3][3],m;
void prod(int p1[3][3],int p2[3][3])
{
int i,j,aux[3][3];
long long cn;
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)
aux[i][j]=0;
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)
for (k=1;k<=2;k++)
{
cn=(long long)aux[i][j]+((long long)p1[i][k]*p2[k][j])%m;
cn=(long long)cn%m;
aux[i][j]=cn;
}
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)
p1[i][j]=aux[i][j];
}
void ridic(int k)
{
int i;
int p[3][3];
p[1][1]=p[1][2]=p[2][1]=1;
p[2][2]=0;
nr[1][1]=nr[2][2]=1;
for(i=0;i<=31;i++,prod(p,p))
if(k & (1<<i))prod(nr,p);
}
int main()
{
m=666013;
fscanf(f,"%d",&k);
if (k>2)
{
ridic(k-2);
fprintf(g,"%d",(nr[1][1]+nr[1][2])%m);
}
else fprintf(g,"%d",1);
fclose(g);
return 0;
}