Pagini recente » Cod sursa (job #1951322) | Cod sursa (job #33555) | Cod sursa (job #547284) | Cod sursa (job #3260916) | Cod sursa (job #808312)
Cod sursa(job #808312)
#include <fstream>
using namespace std;
ifstream in("kfib.in");
ofstream out("kfib.out");
const int MOD=666013;
long long reccurence[2][2]={{1,1},
{1,0}};
void multmat(long long a[2][2],long long b[2][2]){ // a=a*b;
long long c[2][2];
c[0][0]=(a[0][0]*b[0][0])%MOD+(a[0][1]*b[1][0])%MOD;
c[0][1]=(a[0][0]*b[0][1])%MOD+(a[0][1]*b[1][1])%MOD;
c[1][0]=(a[1][0]*b[0][0])%MOD+(a[1][1]*b[1][0])%MOD;
c[1][1]=(a[1][0]*b[0][1])%MOD+(a[1][1]*b[1][1])%MOD;
a[0][0]=c[0][0]%MOD;
a[1][1]=c[1][1]%MOD;
a[1][0]=c[1][0]%MOD;
a[0][1]=c[0][1]%MOD;
}
long long Kfib(int k){
long long result[2][2]={{1,0},
{0,1}};
while(k){
if(k&1){
multmat(result,reccurence);
}
multmat(reccurence,reccurence);
k>>=1;
}
return result[0][1]+result[0][0];
}
int main(){
int k;
in>>k;
k-=2;
out<<Kfib(k);
return 0;
}