Pagini recente » Cod sursa (job #2887523) | Cod sursa (job #511152) | Cod sursa (job #2475309) | Cod sursa (job #2441410) | Cod sursa (job #2427556)
#include <bits/stdc++.h>
using namespace std;
const int MOD = 666013;
ifstream f("kfib.in");
ofstream g("kfib.out");
inline int suma(int u,int v){u=(u+v)%MOD;return u;}
inline int prod(int u,int v){u=1LL*u*v%MOD;return u;}
struct matrix
{
int M[2][2];
matrix(){M[0][0]=0;M[0][1]=0;M[1][0]=0;M[1][1]=0;}
matrix(int a,int b,int c,int d){M[0][0]=a;M[0][1]=b;M[1][0]=c;M[1][1]=d;}
};
matrix operator*(matrix A,matrix B)
{
matrix C;
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
for(int k=0;k<2;k++)
C.M[i][j]=suma(C.M[i][j],prod(A.M[i][k],B.M[k][j]));
return C;
}
matrix operator^(matrix B,int e)
{
if(e==0)return matrix(1,0,0,1);
matrix R=B^(e/2);
R=R*R;
if(e%2)R=R*B;
return R;
}
int main()
{
int n;
f >> n;
g<<(matrix(1,1,1,0)^n).M[0][1];
return 0;
}