Pagini recente » Cod sursa (job #172865) | Cod sursa (job #2600670) | Cod sursa (job #16645) | Cod sursa (job #2006667) | Cod sursa (job #3191799)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("kfib.in");
ofstream g("kfib.out");
const int MOD = 666013;
int matFibInit[2][2] = {{1, 1}, {1, 0}}, matFib[2][2];
void mulMat(int A[][2], int B[][2])
{
long long C[2][2];
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
{
C[i][j] = 0;
for(int p = 0; p < 2; p++)
C[i][j] += 1LL * A[i][p] * B[p][j];
}
for(int i = 0; i < 2 ; i++)
for(int j = 0; j < 2 ; j++)
A[i][j] = C[i][j] % MOD;
}
void calcul(int k)
{
for(int i = 0; i < 2 ; i++)
matFib[i][i] = 1;
while(k > 0)
{
if(k % 2 == 0)
{
mulMat(matFibInit, matFibInit);
k /= 2;
}
else
{
mulMat(matFib, matFibInit);
k--;
}
}
}
int main()
{
int K;
f >> K;
calcul(K);
g << matFib[0][1];
f.close();
g.close();
return 0;
}