Pagini recente » Cod sursa (job #1119372) | Cod sursa (job #1570008) | Cod sursa (job #846095) | Cod sursa (job #2425144) | Cod sursa (job #3191552)
#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])
{
int 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] += (A[i][p] * B[p][j]) % MOD;
C[i][j] %= MOD;
}
}
for(int i = 0; i < 2 ; i++)
for(int j = 0; j < 2 ; j++)
{
A[i][j] = C[i][j] % MOD;
A[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--;
}
}
}
void afis(int A[][2])
{
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 2; j++)
g << A[i][j] << ' ';
g << '\n';
}
g << '\n';
}
int main()
{
int K;
f >> K;
calcul(K);
g << matFib[0][1];
f.close();
g.close();
return 0;
}