Pagini recente » Cod sursa (job #121049) | Rating Voinea Ionut Florin (TeoRoGaming) | Cod sursa (job #1451776) | Cod sursa (job #2801078) | Cod sursa (job #1609396)
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("kfib.in");
ofstream g("kfib.out");
long long n,a[3][3],i,j;
void citire()
{
a[1][1]=0;
a[1][2]=a[2][1]=a[2][2]=1;
f>>n;
}
void inm(long long a[3][3],long long b[3][3],long long c[3][3],long long mod)
{
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)
{
for(int d=1;d<=2;d++)
c[i][j]=(c[i][j]+a[i][d]*b[d][j])%mod;
}
}
void copiaza(long long a[3][3],long long b[3][3])
{
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)
a[i][j]=b[i][j];
}
long long ridicare(long long a[3][3],long long p,long long mod)
{
long long x[3][3],y[3][3];
x[1][1]=1;
x[1][2]=0;
x[2][1]=0;
x[2][2]=1;
while(p)
{
y[1][1]=y[1][2]=y[2][1]=y[2][2]=0;
if(p%2==1)
{
inm(x,a,y,mod);
copiaza(x,y);
p--;
}
else
{
inm(a,a,y,mod);
copiaza(a,y);
p=p/2;
}
}
/* for(i=1;i<=2;i++)
for(j=1;j<=2;j++) g<<x[i][j]<<" ";*/
return x[2][2];
}
int main()
{
citire();
g<<ridicare(a,n-1,666013)<<"\n";
// afisare();
return 0;
}