Pagini recente » Cod sursa (job #764364) | Cod sursa (job #1564811) | Cod sursa (job #1538222) | Cod sursa (job #2359691) | Cod sursa (job #589111)
Cod sursa(job #589111)
#include <cstring>
#include <fstream>
using namespace std;
const int MOD = 666013;
typedef long long i64;
int T, N, X, Y, Z, A, B, C;
i64 V1[4][4], V2[4][4], V3[4][4], R[4][4];
void inm1()
{
for (int i = 1; i <= 3; ++i)
for (int j = 1; j <= 3; ++j)
for (int k = 1; k <= 3; ++k)
R[i][j] += V1[i][k] * V2[k][j], R[i][j] %= MOD;
}
void inm2()
{
for (int i = 1; i <= 3; ++i)
for (int j = 1; j <= 3; ++j)
for (int k = 1; k <= 3; ++k)
R[i][j] += V2[i][k] * V3[k][j], R[i][j] %= MOD;
}
void logPow(int x)
{
for (i64 i = 1; i <= x; i <<= 1)
{
if (i & x)
{
memset(R, 0, sizeof(R));
inm1();
memcpy(V1, R, sizeof(V1));
}
memset(R, 0, sizeof(R));
memcpy(V3, V2, sizeof(V3));
inm2();
memcpy(V2, R, sizeof(V2));
}
}
int main()
{
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
fin >> T;
while (T--)
{
fin >> X >> Y >> Z >> A >> B >> C >> N;
if (N <= 2)
{
if (N == 0) fout << X;
if (N == 1) fout << Y;
if (N == 2) fout << Z;
continue;
}
V1[1][1] = 1, V1[2][1] = 0, V1[3][1] = 0;
V1[1][2] = 0, V1[2][2] = 1, V1[3][2] = 0;
V1[1][3] = 0, V1[2][3] = 0, V1[3][3] = 1;
V2[1][1] = A, V2[2][1] = B, V2[3][1] = C;
V2[1][2] = 1, V2[2][2] = 0, V2[3][2] = 0;
V2[1][3] = 0, V2[2][3] = 1, V2[3][3] = 0;
logPow(N - 2);
memset(R, 0, sizeof(R));
V2[1][1] = Z, V2[1][2] = Y, V2[1][3] = X;
for (int i = 1; i <= 3; ++i)
for (int k = 1; k <= 3; ++k)
R[1][i] += V2[1][k] * V1[k][i], R[1][i] %= MOD;
fout << R[1][1] << '\n';
}
fin.close();
fout.close();
}