Pagini recente » Cod sursa (job #664764) | Cod sursa (job #2470340) | Clasament simulare_de_oni_6 | Cod sursa (job #492989) | Cod sursa (job #1138968)
#include <iostream>
#include <vector>
#include <map>
#include <math.h>
#include <fstream>
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
map<int,int> fib;
int fib2(int q, int k)
{
if(q<3) return 1;
//cout<<q<<" ";
if(fib[q]) return fib[q];
//cin>>c;
int n = q/2;
if(q%2)
{
int l = fib2(n+1,k)%k;
int r = fib2(n,k)%k;
r = l*l+r*r;
fib[q] = r%k;
//cout<<q<<" "<<r<<endl;
return r%k;
}
else
{
int r = fib2(n,k)%k*(fib2(n+1,k)%k+fib2(n-1,k)%k);
fib[q] = r%k;
//cout<<q<<" "<<r<<endl;
return r%k;
}
}
int main()
{
fib[0] = 0;
fib[1] = fib[2] = 1;
int n = 10000000000;
int k = 666013;
fin>>n;
//long r1 =fib1(n,k);
int r2 = fib2(n,k);
// if(r1!=r2) cout<<"alert";
fout<<r2;
//cout<<fib.size();
return 0;
}