Pagini recente » Cod sursa (job #2317978) | Cod sursa (job #786754) | Cod sursa (job #2670108) | Cod sursa (job #467608) | Cod sursa (job #805450)
Cod sursa(job #805450)
#include <iostream>
#include <stdio.h>
FILE *f=fopen("kfib.in","r");
FILE *g=fopen("kfib.out","w");
unsigned long long k;
int i,ms;
void produs(int p1[3][3],int p2[3][3])
{
int i,j,ax[3][3];
long long cn;
for (i=1;i<=2; i++)
for (j=1;j<=2; j++)
for (k=1,ax[i][j]=0;k<=2; k++){
cn=((long long)p1[i][k]*p2[k][j])% ms;
ax[i][j]=((long long)ax[i][j]+cn) % ms;
}
for (i=1;i<=2; i++)
for (j=1;j<=2; j++)
p1[i][j]=ax[i][j];
}
void ridic(int k)
{
int p[3][3],nr[3][3];
p[1][1]=p[1][2]=p[2][1]=1;
p[2][2]=0;
nr[1][1]=nr[2][2]=1;
nr[1][2]=nr[2][1]=0;
for (i=0;i<=31;i++, produs(p,p))
if(k&(1<<i))
produs(nr,p);
fprintf(g,"%d",(nr[1][1]+nr[1][2])%ms);
}
using namespace std;
int main()
{
ms=666013;
fscanf(f,"%d",&k);
if (k>2)
{
ridic(k-2);
}
else fprintf(g,"%d",1);
return 0;
}