Pagini recente » Cod sursa (job #692821) | Cod sursa (job #1367035) | Cod sursa (job #961359) | Cod sursa (job #1681999) | Cod sursa (job #1914588)
#include <bits/stdc++.h>
#define MOD 666013
using namespace std;
int a[3][3],b[3][3],sol[3][3];
inline void Copy(int a[][3], int b[][3])
{
for(int i=1;i<=2;++i)
for(int j=1;j<=2;++j) a[i][j]=b[i][j];
}
inline void Mult_mat(int a[][3], int b[][3])
{
int c[3][3],i,j,k;
for(i=1;i<=2;++i)
for(j=1;j<=2;++j)
for(c[i][j]=0,k=1;k<=2;++k) c[i][j]=(1LL*a[i][k]*b[k][j] + c[i][j])%MOD;
Copy(a,c);
}
inline void Pow_Log(int a[][3], int p)
{
sol[1][1]=sol[2][2]=1;
while(p)
{
if(p&1)
{
Mult_mat(sol,a); --p;
}
Mult_mat(a,a); p>>=1;
}
Copy(a,sol);
}
int main()
{
int n;
ifstream cin("kfib.in");
ofstream cout("kfib.out");
cin>>n;
if(!n)
{
cout<<"0\n";
return 0;
}
if(n==1)
{
cout<<"1\n";
return 0;
}
a[1][1]=0; a[1][2]=1;
b[1][1]=0; b[2][1]=1;
b[1][2]=b[2][2]=1;
Pow_Log(b,n-1);
Mult_mat(a,b);
cout<<a[1][2]<<"\n";
return 0;
}