Pagini recente » Cod sursa (job #135674) | Cod sursa (job #1886382) | Cod sursa (job #1044119) | Cod sursa (job #144293) | Cod sursa (job #1019586)
#include <fstream>
//#include <iostream>
using namespace std;
ifstream f("kfib.in");
ofstream g("kfib.out");
#define MOD 666013
#define ll long long
#define cout g
ll result;
int nrf;
struct qua
{
ll a,b,c,d;
};
qua init;
qua mul(qua x1,qua x2)
{
qua res;
res.a=x1.a*x2.a+x1.b*x2.c;
res.b=x1.a*x2.b+x1.b*x2.d;
res.c=x1.c*x2.a+x1.d*x2.c;
res.d=x1.c*x2.b+x1.d*x2.d;
res.a%=MOD;
res.b%=MOD;
res.c%=MOD;
res.d%=MOD;
return res;
}
qua lgpow(int P)
{
if (P==1) return init;
qua res=mul(lgpow(P/2),lgpow(P/2));
if (P%2) res=mul(res,init);
return res;
}
int main()
{
f>>nrf;
init.a=0;
init.b=1;
init.c=1;
init.d=1;
--nrf;
if (nrf==0) result=0;
else
{
if (nrf==1) result=1;
else
{
qua X=lgpow(nrf-1);
// cout<<X.a<<" "<<X.b<<'\n'<<X.c<<" "<<X.d<<'\n';
result=X.b+X.d;
}
}
result%=MOD;
cout<<result<<'\n';
return 0;
}