Pagini recente » Cod sursa (job #31093) | Cod sursa (job #1652961) | Cod sursa (job #449174) | Cod sursa (job #3199333) | Cod sursa (job #2591964)
#include <iostream>
#include <fstream>
const int MOD = 666013;
using namespace std;
ifstream in("kfib.in");
ofstream out("kfib.out");
int n,fibo[2][2] = {{0,1},{1,1}};
int raspuns[2][2] = {{1,0},{0,1}};
void inmulteste(int a[2][2],int b[2][2]){
// a[0][0] = (1ll * a[0][0] * b[0][0] % MOD + 1ll * a[0][1] * b[1][0] % MOD) % MOD;
// a[0][1] = (1ll * a[0][0] * b[0][1] % MOD + 1ll * a[0][1] * b[1][1] % MOD) % MOD;
// a[1][0] = (1ll * a[1][0] * b[0][0] % MOD + 1ll * a[1][1] * b[1][0] % MOD) % MOD;
// a[1][1] = (1ll * a[1][0] * b[0][1] % MOD + 1ll * a[1][1] * b[1][1] % MOD) % MOD;
int c[2][2];
for(int i = 0; i < 2; i++){
for(int j = 0; j < 2; j++){
c[i][j] = 0;
for(int k = 0; k < 2; k++)
c[i][j] = (1ll * a[i][k] * b[k][j] + c[i][j]) % MOD;
}
}
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
a[i][j] = c[i][j];
}
void afis(){
for(int i = 0; i < 2; i++){
//for(int j = 0; j < 2; j++)
//cout<<fibo
}
}
void exponentiere(int exponent){
while(exponent > 0){
if(exponent % 2 == 0){
inmulteste(fibo,fibo);
}else{
inmulteste(raspuns,fibo);
inmulteste(fibo,fibo);
}
exponent /= 2;
}
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
fibo[i][j] = raspuns[i][j];
}
int main()
{
in>>n;
exponentiere(n);
out<<fibo[1][0] % MOD;
return 0;
}