Pagini recente » Monitorul de evaluare | Cod sursa (job #2966413) | Cod sursa (job #404471) | Cod sursa (job #678545) | Cod sursa (job #2168614)
#include <stdio.h>
#include <string.h>
typedef long long ll;
typedef ll mat_t[3][3];
#define MOD 666013
static mat_t Z, A;
static void lgput(ll k)
{
mat_t C, AA;
int i, j, l;
if (k <= 1) {
return;
}
memcpy(C, Z, sizeof C);
lgput(k >> 1);
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
A[i][j] = 0;
for (l = 0; l < 3; l++) {
A[i][j] = (A[i][j] + (Z[i][l] * Z[l][j]) % MOD) % MOD;
}
}
}
memcpy(AA, A, sizeof AA);
if (k & 1) {
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
A[i][j] = 0;
for (l = 0; l < 3; l++) {
A[i][j] = (A[i][j] + (AA[i][l] * C[l][j]) % MOD) % MOD;
}
}
}
}
memcpy(Z, A, sizeof Z);
}
int main(void)
{
ll t, x, y, z, a, b, c, n;
freopen("iepuri.in", "r", stdin);
freopen("iepuri.out", "w", stdout);
scanf("%lld", &t);
while (t--) {
scanf("%lld %lld %lld %lld %lld %lld %lld", &x, &y, &z, &a, &b, &c, &n);
Z[0][0] = Z[0][1] = Z[1][1] = Z[2][0] = 0;
Z[1][0] = Z[2][1] = 1;
Z[0][2] = c;
Z[1][2] = b;
Z[2][2] = a;
lgput(n - 2);
printf("%lld\n", ((x * Z[0][2]) % MOD + (y * Z[1][2]) % MOD + (z * Z[2][2]) % MOD) % MOD);
}
return 0;
}