Pagini recente » Cod sursa (job #1804568) | Istoria paginii utilizator/artur_paraschiv | Cod sursa (job #846043) | Cod sursa (job #1584664) | Cod sursa (job #982092)
Cod sursa(job #982092)
#include <fstream>
#include <cstring>
#define In "kfib.in"
#define Out "kfib.out"
#define MOD 666013
using namespace std;
int K,sol[3][3],Z[3][3];
inline void Read()
{
ifstream f(In);
f>>K;
f.close();
}
inline void Inm(int c[3][3],int a[3][3],int b[3][3])
{
memset(c,0,sizeof(c));
int i, j, k;
for(i = 0 ;i < 2 ; ++i)
for(j = 0 ; j < 2 ; ++j)
{
c[i][j] = 0;
for(k = 0; k < 2; ++k)
c[i][j] = (c[i][j]+1LL*a[i][k]*b[k][j])%MOD;
}
}
inline void PowLog(int k)
{
int aux[3][3];
while(k)
{
if(k&1)
{
Inm(aux,sol,Z);
memcpy(sol,aux,sizeof(aux));
--k;
}
k>>=1;
Inm(aux,Z,Z);
memcpy(Z,aux,sizeof(aux));
}
}
inline void Solve()
{
Z[0][1] = Z[1][0] = Z[1][1] = 1;
sol[0][0] = sol[1][1] = 1;
PowLog(K-1);
}
inline void Write()
{
ofstream g(Out);
g<<sol[1][1]<<"\n";
g.close();
}
int main()
{
Read();
Solve();
Write();
return 0;
}