Pagini recente » Cod sursa (job #673052) | Cod sursa (job #3352363) | Cod sursa (job #2445441) | Cod sursa (job #1537802) | Cod sursa (job #3325645)
#include <fstream>
#define MOD 666013
using namespace std;
ifstream cin("kfib.in");
ofstream cout("kfib.out");
long long baza[4][4], rez[4][4], fibo[4][2], copie[4][4], rezskibidi[4][2], copie1[4][2];
int main()
{
int i, j, k;
long long n, exp;
cin>>n;
if(n==1||n==2)
{
cout<<1;
}
else
{
exp=n-2;
fibo[1][1]=1;
fibo[2][1]=1;
fibo[3][1]=2;
baza[1][2]=1;
baza[2][3]=1;
baza[3][2]=1;
baza[3][3]=1;
for(i=1;i<=3;i++)
{
rez[i][i]=1;
}
///ridicare la putere
while(exp>0)
{
if(exp%2==0)
{
exp/=2;
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
copie[i][j]=0;
for(k=1;k<=3;k++)
{
copie[i][j]=(copie[i][j]+baza[i][k]*baza[k][j]*1LL)%MOD;
}
}
}
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
baza[i][j]=copie[i][j];
}
}
}
else
{
exp--;
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
copie[i][j]=0;
for(k=1;k<=3;k++)
{
copie[i][j]=(copie[i][j]+rez[i][k]*baza[k][j]*1LL)%MOD;
}
}
}
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
rez[i][j]=copie[i][j];
}
}
}
}
///inmultim fibo cu rez
for(i=1;i<=3;i++)
{
copie1[i][1]=0;
for(j=1;j<=3;j++)
{
copie1[i][1]=(copie1[i][1]+rez[i][j]*fibo[j][1]*1LL)%MOD;
}
rezskibidi[i][1]=copie1[i][1];
}
cout<<rezskibidi[2][1];
}
return 0;
}