Pagini recente » Cod sursa (job #10479) | Cod sursa (job #711054) | Cod sursa (job #311977) | Cod sursa (job #683877) | Cod sursa (job #2494871)
#include<bits/stdc++.h>
using namespace std;
ifstream in("kfib.in");
ofstream out("kfib.out");
const int mod=666013;
struct matrix
{
long long mat[2][2];
matrix()
{
for(int i=0; i<2; i++)
for(int k=0; k<2; k++)
{
mat[i][k]=0;
}
mat[0][0]=1;
mat[1][1]=1;
}
void prt()
{
for(int i=0; i<2; i++)
{
for(int k=0; k<2; k++)
{
cout<<mat[i][k]<<" ";
}
cout<<endl;
}
cout<<endl;
}
matrix operator*(const matrix&other)
{
matrix newmat;
for(int y=0; y<2; y++)
{
for(int x=0; x<2; x++)
{
int sum=0;
for(int k=0; k<2; k++)
{
sum=(sum+mat[y][k]*other.mat[k][x])%mod;
}
newmat.mat[y][x]=sum;
}
}
return newmat;
}
};
matrix base;
void init_base()
{
base.mat[0][0]=1;
base.mat[0][1]=1;
base.mat[1][0]=1;
base.mat[1][1]=0;
}
void rapid_exponentiation(int n)
{
matrix result;
n--;
for(int i=1; i<=n; i*=2)
{
if(n&i)
{
result=result*base;
}
base=base*base;
}
out<<result.mat[0][0];
}
int n;
void read()
{
in>>n;
}
int main()
{
init_base();
read();
rapid_exponentiation(n);
}