Pagini recente » Cod sursa (job #2731630) | Cod sursa (job #2904536) | Cod sursa (job #651879) | Cod sursa (job #831347) | Cod sursa (job #1674768)
#include <iostream>
#include <fstream>
#define MOD 666013
using namespace std;
ifstream in("kfib.in");
ofstream out("kfib.out");
class matrix{
public:
long long int a[3][3];
int l,c;
};
int k;
matrix inmultire(matrix a,matrix b)
{
matrix r;
r.l = a.l;
r.c = b.c;
for(int i=1;i<=a.l;i++)
for(int j=1;j<=b.c;j++)
r.a[i][j] = 0;
for(int i=1;i<=a.l;i++)
for(int j=1;j<=b.c;j++)
for(int k=1;k<=a.c;k++)
r.a[i][j]+= (1LL*a.a[i][k]*b.a[k][j])%MOD;
return r;
}
matrix ridicare(matrix a,int p)
{
if(p==1)
return a;
else
{
if(p%2==0)
{
matrix aux = ridicare(a,p/2);
return inmultire(aux,aux);
}
else
return inmultire(a,ridicare(a,p-1));
}
}
int main()
{
in>>k;
in.close();
if(k==1)
out<<0<<"\n";
else
{
matrix m;
m.l = 2;
m.c = 2;
m.a[1][1] = 0;
m.a[1][2] = 1;
m.a[2][1] = 1;
m.a[2][2] = 1;
m = ridicare(m,k-1);
matrix fib;
fib.l = 1;
fib.c = 2;
fib.a[1][1] = 0;
fib.a[1][2] = 1;
fib = inmultire(fib,m);
out<<fib.a[1][2]%MOD<<"\n";
out.close();
}
return 0;
}