Pagini recente » Cod sursa (job #2514257) | Cod sursa (job #1757452) | Cod sursa (job #2753827) | Cod sursa (job #2563270) | Cod sursa (job #1420787)
#include <fstream>
#include <iostream>
#include <vector>
#define MOD 666013
using namespace std;
using Matrix = vector<vector<int> >;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
inline void multiply_matrix(Matrix &m1, Matrix &m2)
{
Matrix res(m1.size(), vector<int>(m2.front().size(), 0));
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
for (int k = 0; k < 3; k++)
res[i][j] = (res[i][j] + 1LL * m1[i][k] * m2[k][j]) % MOD;
swap(m2, res);
}
inline void log_pow_matrix(Matrix &z, int power)
{
Matrix res(z.size(), std::vector<int>(z.size(), 0));
for (auto i = 0u; i < z.size(); i++)
res[i][i] = 1;
for (auto i = 0u; (1 << i) <= power; i++) {
if (power & (1 << i))
multiply_matrix(z, res);
multiply_matrix(z, z);
}
swap(res, z);
}
int main()
{
int T;
in >> T;
int X, Y, Z, A, B, C, N;
for (int test = 1; test <= T; test++) {
in >> X >> Y >> Z >> A >> B >> C >> N;
Matrix z(3, vector<int>(3, 0));
z[0][2] = C; z[1][2] = B; z[2][2] = A;
z[1][0] = 1; z[2][1] = 1;
log_pow_matrix(z, N - 2);
Matrix m1(1, vector<int>(3, 0));
m1[0][0] = X; m1[0][1] = Y; m1[0][2] = Z;
//multiply_matrix(m1, z);
long long soll = X * z[0][2] + Y * z[1][2] + Z * z[2][2];
out << soll % MOD << '\n';
}
return 0;
}