Pagini recente » Cod sursa (job #1238958) | Cod sursa (job #2126602)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("kfib.in");
ofstream fout ("kfib.out");
const short var = 2;
const int Mod = 666013;
int a[var + 2][var + 2] , v[var + 2][var + 2] , k;
inline void Inmult(int aux[var + 2][var + 2] , int aux1[var + 2][var + 2])
{
int c[var + 2][var + 2];
long long s;
for(int i = 1 ; i <= var ; i++)
for(int j = 1 ; j <= var ; j++)
{
s = 0;
for(int k = 1 ; k <= var ; k++)
s += (1LL * aux[i][k] * aux1[k][j]);
c[i][j] = s % Mod;
}
for(int i = 1 ; i <= var ; i++)
for(int j = 1 ; j <= var ; j++)
aux[i][j] = c[i][j];
}
inline void LGPUT(int n)
{
int unit[var + 2][var + 2];
unit[1][var] = unit[var][1] = unit[var][var] = 1;
while(n > 0)
{
if(n % 2 == 1)
Inmult(unit , v);
n /= 2;
Inmult(v , v);
}
for(int i = 1 ; i <= var ; i++)
for(int j = 1 ; j <= var ; j++)
v[i][j] = unit[i][j];
}
int main()
{
fin >> k;
a[1][var] = 1;
v[1][var] = v[var][1] = v[var][var] = 1;
LGPUT(k - 2);
Inmult(a , v);
fout << a[1][var] << "\n";
fin.close();
fout.close();
return 0;
}