Pagini recente » Cod sursa (job #956912) | Cod sursa (job #1005804) | Cod sursa (job #144334) | Cod sursa (job #2445375) | Cod sursa (job #3323237)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
const int ms=5,MOD=666013;
long long int ans[ms][ms],inm[ms][ms],aux[ms][ms],rez[ms][ms];
void prod(long long int a[ms][ms],long long int b[ms][ms],long long int r[ms][ms],int n,int m,int p){
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++){
aux[i][j]=0;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int k=1;k<=p;k++){
aux[i][j]=(aux[i][j]+a[i][k]*b[k][j])%MOD;
}
}
}
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++){
r[i][j]=aux[i][j];
}
}
}
void lgput(long long int m[ms][ms],int n,int e){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
rez[i][j]=0;
}
}
for(int i=1;i<=n;i++) rez[i][i]=1;
while(e!=0){
if(e%2==1){
prod(rez,m,rez,n,n,n);
}
prod(m,m,m,n,n,n);
e/=2;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
m[i][j]=rez[i][j];
}
}
}
int main(){
int n;
fin>>n;
inm[1][1]=1;
inm[1][2]=1;
inm[2][1]=1;
inm[2][2]=0;
ans[1][1]=1;
ans[1][1]=1;
if(n<=1) fout<<ans[1][1];
else{
n--;
lgput(inm,2,n);
prod(ans,inm,ans,1,2,2);
fout<<ans[1][1];
}
return 0;
}