Pagini recente » Cod sursa (job #2126554) | Cod sursa (job #2722268) | Cod sursa (job #2885143) | Cod sursa (job #2469899) | Cod sursa (job #2392666)
#include <bits/stdc++.h>
#define MOD 666013
#define ll long long
using namespace std;
ifstream f ("kfib.in") ;
ofstream g ("kfib.out") ;
ll a[3][3] , c[3][3], sol[3][3];
int N , K ;
void inmultire(ll A[3][3] , ll B[3][3])
{
int i , j , k;
ll C[3][3];
C[1][1] = C[2][2] = C[1][2] = C[2][1] = 0;
for (int i = 1 ; i <= 2 ; ++i)
for (int j = 1 ; j <= 2; ++j)
for (int k = 1 ; k <= 2 ; ++k)
C[i][j] += (A[i][k]*B[k][j])%MOD ;
A[1][1] = C[1][1]%MOD;
A[1][2] = C[1][2]%MOD;
A[2][1] = C[2][1]%MOD;
A[2][2] = C[2][2]%MOD;
}
void putere (ll sol[3][3] , int k)
{
while (k)
{
if (k % 2 == 1)
{
inmultire(sol,c) ;
k--;
}
else
{
inmultire(c,c) ; // c^2
k /= 2;
}
}
}
int main()
{
f >> N ;
a[1][1] = 0; // f0
a[1][2] = 1; //f1
a[2][1] = 0;
a[2][2] = 0;
c[1][1] = 0;
c[1][2] = 1;
c[2][1] = 1;
c[2][2] = 1;
sol[1][1] = 1;
sol[1][2] = 0;
sol[2][1] = 0;
sol[2][2] = 1;
// Mat neutra ^^
putere(sol,N) ; //sol = c^N;
inmultire(a,sol);
g << a[1][1]%MOD ;
f.close();
g.close();
return 0;
}