Pagini recente » Cod sursa (job #2597753) | Cod sursa (job #1110112) | Cod sursa (job #359962) | Cod sursa (job #2557447) | Cod sursa (job #922794)
Cod sursa(job #922794)
#include <fstream>
//#include <iostream>
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
long long z[2][2];
long long aux[2][2],rez[2][2];
#define MODULO 666013
int k;
long long check(long long val)
{
while(val>MODULO)
val -= MODULO;
return val;
}
void fx(long long a[2][2],long long b[2][2]) // A <- B*A;
{
int c[2][2];
c[0][0] = check(a[0][0]*b[0][0]) + check(a[1][0]*b[0][1]);
c[1][0] = check(a[0][0]*b[1][0]) + check(a[1][0]*b[1][1]);
c[0][1] = check(a[0][0]*b[0][1]) + check(a[0][1]*b[1][1]);
c[1][1] = check(a[1][0]*b[0][1]) + check(a[1][1]*b[1][1]);
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
{
a[i][j] = c[i][j];
if(a[i][j] > MODULO) a[i][j] -= MODULO;
if(b[i][j] > MODULO) b[i][j] -= MODULO;
}
}
void logx(int pow)
{
aux[1][1] = aux[0][0] = 1;
int rez2=2,aux2=1;
while(pow)
{
if(pow%2 == 1)
{
fx(aux , rez);
//aux2 = rez2*aux2;
}
pow = pow / 2;
if(pow)
//rez2=rez2*rez2;
fx(rez , rez);
}
}
void solve()
{
logx(k-1);
//for(int i=0;i<2;i++)
// for(int j=0;j<2;j++)
// fout<<aux[i][j]<<" ";
fout<<(aux[1][0] + aux[0][0])%MODULO;
}
void init()
{
rez[0][0] = z[0][0] = 0;
rez[1][0] = z[1][0] = 1;
rez[1][1] = z[1][1] = 1;
rez[0][1] = z[0][1] = 1;
fin>>k;
}
int main()
{
init();
solve();
// fout<<logx(11);
}