Pagini recente » Cod sursa (job #2482066) | Cod sursa (job #1135893) | Cod sursa (job #3167450)
//Rares 0net
#ifdef RS
#define RS
#endif
#ifdef RS
#include "Rares0.hpp"
#else
#include<fstream>
#include<vector>
using namespace std;
const string N_file="kfib";
ifstream fin(N_file+".in");
ofstream fout(N_file+".out");
#define cin fin
#define cout fout
#endif
void RSinit()
{
cin.tie(0)->sync_with_stdio(false);
cout.tie(0);
}
#define MOD 666013
using LL=long long int;
using VL=vector<LL>;
using VVL=vector<VL>;
VVL Multiplicare(const VVL &mtr1, const VVL &mtr2)
{
size_t size=mtr1.size();
VVL ans(size, VL(size, 0));
for(size_t i=0; i<size; ++i)
for(size_t j=0; j<size; ++j)
for(size_t k=0; k<size; ++k)
ans[i][j]=(ans[i][j]+(mtr1[i][k]*mtr2[k][j])%MOD)%MOD;
return ans;
}
VVL PowTimpLog(const VVL &base, LL p)
{
size_t size=base.size();
VVL ans(size, VL(size, 0));
for(size_t i=0; i<size; ++i)
ans[i][i]=1;
VVL pVechi=base;
while(p)
{
if(p%2==1)
ans=Multiplicare(ans, pVechi);
pVechi=Multiplicare(pVechi, pVechi);
p/=2;
}
return ans;
}
void Solve()
{
VVL MtrMultiplu=
{
{0, 1},
{1, 1}
};
LL k;
cin>>k;
MtrMultiplu=PowTimpLog(MtrMultiplu, k);
LL ans=MtrMultiplu[0].back();
cout<<ans;
}
main()
{
RSinit();
Solve();
}