Pagini recente » Cod sursa (job #1217093) | Cod sursa (job #974082) | Cod sursa (job #84545) | Cod sursa (job #526944) | Cod sursa (job #2374941)
#include <bits/stdc++.h>
using namespace std;
const short var = 2;
const int Mod = 666013;
ifstream fin ("kfib.in");
ofstream fout ("kfib.out");
int a[var + 1][var + 1], unit[var + 1][var + 1], n, b[var + 1][var + 1] , c[var + 1][var + 1];
inline void Lgput(int n)
{
int s;
unit[1][1] = unit[var][var] = 1;
while(n)
{
if(n & 1)
{
for(int i = 1 ; i <= var ; i++)
for(int j = 1 ; j <= var ; j++)
{
s = 0;
for(int k = 1 ; k <= var ; k++)
s = (s + 1LL * unit[i][k] * b[k][j] % Mod) % Mod;
c[i][j] = s;
}
for(int i = 1 ; i <= var ; i++)
for(int j = 1 ; j <= var ; j++)
unit[i][j] = c[i][j];
}
n /= 2;
for(int i = 1 ; i <= var ; i++)
for(int j = 1 ; j <= var ; j++)
{
s = 0;
for(int k = 1 ; k <= var ; k++)
s = (s + 1LL * b[i][k] * b[k][j] % Mod) % Mod;
c[i][j] = s;
}
for(int i = 1 ; i <= var ; i++)
for(int j = 1 ; j <= var ; j++)
b[i][j] = c[i][j];
}
for(int i = 1 ; i <= var ; i++)
for(int j = 1 ; j <= var ; j++)
b[i][j] = unit[i][j];
}
int main()
{
fin >> n;
if(n == 1 || n == 2)
fout << "1\n";
else
{
a[1][1] = a[1][var] = 1;
b[1][var] = b[2][1] = b[2][var] = 1;
Lgput(n - 2);
for(int i = 1 ; i <= var ; i++)
for(int j = 1 ; j <= var ; j++)
{
int s = 0;
for(int k = 1 ; k <= var ; k++)
s = (s + 1LL * a[i][k] * b[k][j] % Mod) % Mod;
c[i][j] = s;
}
for(int i = 1 ; i <= var ; i++)
for(int j = 1 ; j <= var ; j++)
a[i][j] = c[i][j];
fout << a[1][var] << "\n";
}
fin.close();
fout.close();
return 0;
}