Pagini recente » Cod sursa (job #1991724) | Cod sursa (job #252095) | Cod sursa (job #1684442) | Cod sursa (job #3286951) | Cod sursa (job #2674174)
/*
#include <iostream>
#include <fstream>
using namespace std;
const int mod=666013,p=1332028;//perioada modulo mod
ifstream f("kfib.in");
ofstream g("kfib.out");
int fibonacci(int n)
{
if(n==0) return 0;
int f0=0,f1=1,f2;
for(int i=2;i<=n;i++)
{
f2=(f0+f1)%mod;
f0=f1;
f1=f2;
}
return f1;
}
int main()
{
int k;
f>>k;
g<<fibonacci(k%p);
return 0;
}
*/
///varianta 2
#include <fstream>
#include <cstring>
using namespace std;
const int mod=666013;
int a[2][2]= {{1,1},{1,0}},
i[2][2]= {{1,0},{0,1}};
ifstream f("kfib.in");
ofstream g("kfib.out");
void multmat(int a[][2],int b[][2])
{
int c[2][2];
for(int i=0; i<2; i++)
for(int j=0; j<2; j++)
{
c[i][j]=0;
for(int k=0; k<2; k++)
c[i][j]=(c[i][j]+1ll*a[i][k]*b[k][j])%mod;
}
memcpy(a,c,sizeof(c));///copiem pe c in a
}
void puteremat(int p) ///logaritmic
{
while(p>0)
if(p%2==0)
{
multmat(a,a);
p/=2;
}
else
{
multmat(i,a);
p--;
}
}
int main()
{
int k;
f>>k;
if(k<=1)
g<<k;
else
{
puteremat(k-1);
g<<i[0][0];
}
return 0;
}