Pagini recente » Cod sursa (job #97692) | Cod sursa (job #2106065) | Cod sursa (job #2796342) | Cod sursa (job #148123) | Cod sursa (job #2148352)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("kfib.in");
ofstream fout ("kfib.out");
const int Mod = 666013;
const short var = 3;
int a[var][var], v[var][var], n;
inline void Inmult(int a[var][var], int b[var][var])
{
int c[var][var];
for(int i = 1 ; i <= var - 1 ; i++)
for(int j = 1 ; j <= var - 1 ; j++)
{
int sum = 0;
for(int k = 1 ; k <= var - 1; k++)
sum = (sum + 1LL * a[i][k] * b[j][k]) % Mod;
c[i][j] = sum;
}
for(int i = 1 ; i <= var - 1 ; i++)
for(int j = 1 ; j <= var - 1 ; j++)
a[i][j] = c[i][j];
}
inline void Lgput(int n)
{
int u[var][var];
u[1][1] = u[2][2] = 1;
u[1][2] = u[2][1] = 0;
while(n > 0)
{
if(n & 1)
Inmult(u , v);
n /= 2;
Inmult(v, v);
}
for(int i = 1 ; i <= var - 1 ; i++)
for(int j = 1 ; j <= var - 1 ; j++)
v[i][j] = u[i][j];
}
int main()
{
fin >> n;
v[1][2] = 1;
v[2][1] = v[2][2] = 1;
a[1][2] = 1;
Lgput(n - 1);
Inmult(a, v);
fout << a[1][2] << "\n";
fin.close();
fout.close();
return 0;
}