Pagini recente » Cod sursa (job #2475586) | Cod sursa (job #2623251) | Cod sursa (job #784075) | Cod sursa (job #2061634) | Cod sursa (job #2041527)
#include <iostream>
#include <fstream>
using namespace std;
const int mod = 666013;
ifstream f("kfib.in");
ofstream g("kfib.out");
long long m[2][2] = {{1, 1}, {1, 0}};
long long p[2][2] = {{1, 0}, {0, 1}};
void inmm()
{
long long t[2][2];
t[0][0] = m[0][0] * m[0][0] + m[0][1] * m[1][0];
t[0][1] = m[0][0] * m[0][1] + m[0][1] * m[1][1];
t[1][0] = m[1][0] * m[0][0] + m[1][1] * m[1][0];
t[1][1] = m[1][0] * m[0][1] + m[1][1] * m[1][1];
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
m[i][j] = t[i][j] % mod;
}
void inmp()
{
long long t[2][2];
t[0][0] = p[0][0] * m[0][0] + p[0][1] * m[1][0];
t[0][1] = p[0][0] * m[0][1] + p[0][1] * m[1][1];
t[1][0] = p[1][0] * m[0][0] + p[1][1] * m[1][0];
t[1][1] = p[1][0] * m[0][1] + p[1][1] * m[1][1];
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
p[i][j] = t[i][j] % mod;
}
long long putere(int n)
{
while(n > 0)
{
if(n % 2 == 0)
{
n /= 2;
inmm();//m*=m;
}
else
{
n--;
inmp();//p *= m;
}
}
return p[0][0];
}
int main()
{
int K;
f >> K;
if(K <= 1)
g << K;
else
g << putere(K - 1);
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 2; j++)
cout << m[i][j] << " ";
cout << endl;
}
return 0;
}