Pagini recente » Cod sursa (job #2404472) | Cod sursa (job #834421) | Cod sursa (job #1133983) | Cod sursa (job #547488) | Cod sursa (job #549983)
Cod sursa(job #549983)
#include <cstdio>
#include <cassert>
#define Nmax 5
#define Mod 666013
#define InFile "kfib.in"
#define OutFile "kfib.out"
#define ll long long
using namespace std;
int k;
int sol[Nmax][Nmax];
int a[Nmax][Nmax];
void Power (int);
void inmult (int A[Nmax][Nmax], int B[Nmax][Nmax]);
int main()
{
assert (freopen (InFile, "r", stdin));
assert (freopen (OutFile, "w", stdout));
scanf ("%d\n", &k);
Power (k-1);
printf ("%d\n", sol[2][2]);
return 0;
}
void Power (int pt)
{
int i;
sol[1][1]=1; sol[2][2]=1;
a[1][1]=0; a[1][2]=a[2][1]=a[2][2]=1;
for (i=0; (1<<i)<=pt; i++)
{
if (pt&(1<<i))
inmult (sol, a);
inmult (a, a);
}
}
void inmult (int A[Nmax][Nmax], int B[Nmax][Nmax])
{
int i, j, k, sum;
int C[Nmax][Nmax];
C[1][1]=C[1][2]=C[2][1]=C[2][2]=0;
for (i=1; i<=2; i++)
for (j=1; j<=2; j++)
{
sum=0;
for (k=1; k<=2; k++)
sum=(sum+(ll)A[i][k]*B[k][j])%Mod;
C[i][j]=sum;
}
for (i=1; i<=2; i++)
for (j=1; j<=2; j++)
A[i][j]=C[i][j];
}