Pagini recente » Cod sursa (job #696586) | Cod sursa (job #2549549) | Cod sursa (job #2216712) | Cod sursa (job #2065503) | Cod sursa (job #2443437)
#include <fstream>
using namespace std;
ifstream cin("kfib.in");
ofstream cout("kfib.out");
const int MOD = 666013;
struct matrice
{
long long m[2][2];
void clearr(){
for(int i = 0;i < 2;i++){
for(int j = 0;j < 2;j++){
m[i][j] = 0;
}
}
}
matrice operator * (matrice const a)
const{
matrice rez;
rez.clearr();
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 2; j++)
{
rez.m[i][j] = 0;
for(int k = 0; k < 2; k++)
{
rez.m[i][j] += m[i][k] * a.m[k][j];
rez.m[i][j] %= MOD;
}
}
}
return rez;
}
};
matrice exp(matrice n,int p)
{
matrice rest;
int i,j;
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j++)
{
rest.m[i][j] = n.m[i][j];
}
while(p)
{
if(p % 2)
{
rest = rest * n;
}
n = n * n;
p >>= 1;
}
return rest;
}
int main()
{
int n,i,j;
cin >> n;
matrice init;
init.m[0][0] = init.m[1][0] = init.m[0][1] = 1;
init.m[1][1] = 0;
cout << exp(init,n -2).m[0][0] ;
return 0;
}