Pagini recente » Cod sursa (job #1764705) | Cod sursa (job #2260752) | Cod sursa (job #1578897) | Cod sursa (job #2536385) | Cod sursa (job #706020)
Cod sursa(job #706020)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define MOD 666013
#define int64 long long
int M[5][5], sol[5][5];
int O3[5][5];
void cpy (int B[5][5], int C[5][5])
{
for (int i = 1; i <= 3; ++ i)
for (int j = 1; j <= 3; ++ j) B[i][j] = C[i][j];
}
void mul (int B[5][5], int C[5][5])
{
int aux2[5][5];
cpy (aux2, O3);
for (int l = 1; l <= 3; ++ l)
for (int c = 1; c <= 3; ++ c)
for (int i = 1; i <= 3; ++ i)
{
aux2[l][c] += B[l][i] * C[i][c];
if (aux2[l][c] > MOD) aux2[l][c] %= MOD;
}
cpy (B, aux2);
}
void Lg_Pow (int64 P)
{
if (P == 1)
{
cpy (sol, M);
return;
}
Lg_Pow (P / 2);
if (P % 2)
{
mul (sol, sol);
mul (sol, M);
}
else mul (sol, sol);
}
int main()
{
freopen ("iepuri.in", "r", stdin);
freopen ("iepuri.out", "w", stdout);
int T;
scanf ("%d", &T);
while (T --)
{
int X, Y, Z, A, B, C;
int64 N;
scanf ("%d %d %d", &X, &Y, &Z);
scanf ("%d %d %d", &A, &B, &C);
scanf ("%lld", &N);
M[1][1] = M[1][2] = M[2][2] = M[3][1] = 0;
M[2][1] = M[3][2] = 1;
M[1][3] = C, M[2][3] = B, M[3][3] = A;
Lg_Pow (N - 2);
int ans = ((((X * sol[1][3]) % MOD) + Y * sol[2][3]) % MOD) + Z * sol[3][3];
if (ans > MOD) ans %= MOD;
printf ("%d\n", ans);
}
return 0;
}