Pagini recente » Cod sursa (job #1252864) | Cod sursa (job #227252) | Cod sursa (job #2890118) | Cod sursa (job #1310250) | Cod sursa (job #3164673)
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
const int MOD = 666013;
int p[4][4], q[4][4], r[4][4];
int x, y, z, a, b, c, n, t;
inline void expMat(int a[][4], int b[][4], int c[][4])
{
for (int i = 1; i <= 3; ++i)
for (int j = 1; j <= 3; ++j)
for (int k = 1; k <= 3; ++k)
c[i][j] = (c[i][j] + 1LL * a[i][k] * b[k][j]) % MOD;
}
inline void moveMat(int a[][4], int b[][4])
{
for (int i = 1; i <= 3; ++i)
for (int j = 1; j <= 3; ++j)
a[i][j] = b[i][j];
}
void exp_mat()
{
memset(p, 0, sizeof p);
memset(q, 0, sizeof q);
memset(r, 0, sizeof r);
p[2][1] = p[3][2] = 1;
p[1][3] = c;
p[2][3] = b;
p[3][3] = a;
q[1][1] = q[2][2] = q[3][3] = 1;
n -= 2;
while (n)
{
if (n & 1)
{
memset(r, 0, sizeof(r));
expMat(q, p, r);
moveMat(q, r);
}
memset(r, 0, sizeof(r));
expMat(p, p, r);
moveMat(p, r);
n >>= 1;
}
int val = (1LL * x * q[1][3] + 1LL * y * q[2][3] + 1LL * z * q[3][3]) % MOD;
fout << val << "\n";
}
int main()
{
fin >> t;
while (t--)
{
fin >> x >> y >> z >> a >> b >> c >> n;
exp_mat();
}
fout.close();
return 0;
}