Pagini recente » Cod sursa (job #3327654) | Cod sursa (job #2549555) | Cod sursa (job #1144560) | Cod sursa (job #3160386) | Cod sursa (job #3319708)
#include <fstream>
#define MOD 666013
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
int k;
long long mat[3][3];
long long f[3],tk;
void inmultire(long long a[3][3], long long b[3][3])
{
long long rez[3][3]={0};
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
for(int k=0;k<2;k++)
rez[i][j]=(rez[i][j]+a[i][k]*b[k][j]%MOD)%MOD;
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
a[i][j]=rez[i][j];
}
void fib(long long mat[3][3], int k)
{
long long rez[3][3];
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
if(i==j)
rez[i][j]=1;
else
rez[i][j]=0;
while(k)
{
if(k%2==1)
inmultire(rez,mat);
inmultire(mat,mat);
k=k/2;
//fout<<endl;
}
for(int i=0;i<2;i++)
tk+=f[i]*rez[i][0];
}
int main()
{
fin>>k;
mat[0][0]=0;
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
if(i!=0 or j!=0)
mat[i][j]=1;
f[0]=0;
f[1]=1;
fib(mat, k);
fout<<tk;
}