Pagini recente » Cod sursa (job #1723673) | Cod sursa (job #1749462) | Cod sursa (job #693719) | Cod sursa (job #129841) | Cod sursa (job #808314)
Cod sursa(job #808314)
#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;
}