Pagini recente » Cod sursa (job #2258172) | Cod sursa (job #348660) | Cod sursa (job #2653809) | Cod sursa (job #2398754) | Cod sursa (job #1138978)
#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;
long long fib2(long q, long long k)
{
if(q<3) return 1;
//cout<<q<<" ";
if(fib[q]) return fib[q];
char c;
//cin>>c;
long n = q/2;
if(q%2)
{
long long l = fib2(n+1,k)%k;
long long r = fib2(n,k)%k;
r = l*l+r*r;
fib[q] = r%k;
//cout<<q<<" "<<r<<endl;
return r%k;
}
else
{
long long 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;
long n = 10000000000;
long long k = 666013;
fin>>n;
//long r1 =fib1(n,k);
long r2 = fib2(n,k);
// if(r1!=r2) cout<<"alert";
fout<<r2;
//cout<<fib.size();
return 0;
}