Pagini recente » Cod sursa (job #2684771) | Cod sursa (job #846976) | Cod sursa (job #1873995) | Cod sursa (job #493630) | Cod sursa (job #2857598)
// Iepuri.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
/*
f(n) = A*f(n-1)+B*f(n-2)+C*f(n-3), n>3
Y, n=3
Z, n=2
X, n=1
k=3
(0 1 0)^(n-3) (X) (f(n-2))
(0 0 1) x (Y) = (f(n-1))
(C B A) (Z) ( f(n) )
*/
#include <iostream>
#include <fstream>
#define DIM 6
#define MOD 666013
std::ifstream fin("iepuri.in");
std::ofstream fout("iepuri.out");
using namespace std;
int X, Y, Z;
int A, B, C;
int N;
int Identity[DIM][DIM], vect[DIM][DIM];
int ans;
void MultiplyMatrix(int A[][DIM], int B[][DIM], int n, int m, int p)
{ // A = A * B
int C[DIM][DIM];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= p; j++)
C[i][j] = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= p; j++)
for (int k = 1; k <= m; k++)
C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % MOD;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= p; j++)
A[i][j] = C[i][j];
}
void identity_matrix(int p[][DIM])
{
for (int i = 1; i <= 3; i++)
for (int j = 1; j <= 3; j++)
p[i][j] = 0;
for (int i = 1; i <= 3; i++)
p[i][i] = 1;
}
void plog(int e)
{
int p[DIM][DIM];
identity_matrix(p);
for (; e; e >>= 1, MultiplyMatrix(Identity, Identity, 3, 3, 3))
if (e & 1)
MultiplyMatrix(p, Identity, 3, 3, 3);
for (int i = 1; i <= 3; i++)
for (int j = 1; j <= 3; j++)
Identity[i][j] = p[i][j];
}
void Solve()
{
fin >> X >> Y >> Z;
fin >> A >> B >> C;
fin >> N;
N++;
Identity[1][1] = 0, Identity[1][2] = 1, Identity[1][3] = 0;
Identity[2][1] = 0, Identity[2][2] = 0, Identity[2][3] = 1;
Identity[3][1] = C, Identity[3][2] = B, Identity[3][3] = A;
vect[1][1] = X, vect[2][1] = Y, vect[3][1] = Z;
plog(N - 3);
MultiplyMatrix(Identity, vect, 3, 3, 1);
ans = Identity[3][1];
fout << ans << "\n";
}
int main()
{
int T;
for (fin >> T; T--;)
Solve();
return 0;
}