Pagini recente » Cod sursa (job #834044) | Cod sursa (job #3147643) | Cod sursa (job #1725921) | Cod sursa (job #2278097) | Cod sursa (job #1413946)
#include <fstream>
using namespace std;
fstream f("kfib.in", ios::in);
fstream g("kfib.out", ios::out);
const long long modulo = 666013;
long long n, a[3][3], sol[3][3], b[3][3], i, j, k;
void exp()
{
while (n > 0)
{
if (n & 1)
{
for (i = 1; i <= 2; i++)
{
for (k = 1; k <= 2; k++)
{
b[i][k] = 0;
for (j = 1; j <= 2; j++) b[i][k] = (b[i][k] + (sol[i][j] * a[j][k]) % modulo) % modulo;
}
}
for (i = 1; i <= 2; i++)
{
for (k = 1; k <= 2; k++) {
sol[i][k] = b[i][k];
b[i][k] = 0;
}
}
n--;
}
for (i = 1; i <= 2; i++)
{
for (k = 1; k <= 2; k++)
{
b[i][k] = 0;
for (j = 1; j <= 2; j++) b[i][k] = (b[i][k] + (a[i][j] * a[j][k]) % modulo) % modulo;
}
}
for (i = 1; i <= 2; i++)
{
for (k = 1; k <= 2; k++) {
a[i][k] = b[i][k];
b[i][k] = 0;
}
}
n = n >> 1;
}
}
int main()
{
f >> n;
n -= 2;
a[1][1] = 0; a[1][2] = 1; a[2][1] = 1; a[2][2] = 1;
sol[1][1] = 1; sol[1][2] = 0; sol[2][1] = 0; sol[2][2] = 1;
exp();
g << (sol[1][2] + sol[2][2]) % modulo;
return 0;
}