Pagini recente » Cod sursa (job #133115) | Cod sursa (job #114174) | Cod sursa (job #22701) | Cod sursa (job #1046704) | Cod sursa (job #2583339)
#include <bits/stdc++.h>
using namespace std;
#define MOD 666013
#define KMAX 3
void multiply_matrix(int A[KMAX][KMAX], int B[KMAX][KMAX], int C[KMAX][KMAX]) {
int tmp[KMAX][KMAX];
for (int i = 0; i < KMAX; ++i) {
for (int j = 0; j < KMAX; ++j) {
unsigned long long sum = 0;
for (int k = 0; k < KMAX; ++k) {
sum += 1LL * A[i][k] * B[k][j];
}
tmp[i][j] = sum % MOD;
}
}
// C = tmp
memcpy(C, tmp, sizeof(tmp));
}
void power_matrix(int C[KMAX][KMAX], int p, int R[KMAX][KMAX]) {
// tmp = I (matricea identitate)
int tmp[KMAX][KMAX];
for (int i = 0; i < KMAX; ++i) {
for (int j = 0; j < KMAX; ++j) {
tmp[i][j] = (i == j) ? 1 : 0;
}
}
while (p != 1) {
if (p % 2 == 0) {
multiply_matrix(C, C, C); // C = C*C
p /= 2; // ramane de calculat C^(p/2)
} else {
// reduc la cazul anterior:
multiply_matrix(tmp, C, tmp); // tmp = tmp*C
--p; // ramane de calculat C^(p-1)
}
}
// avem o parte din rezultat in C si o parte in tmp
multiply_matrix(C, tmp, R); // rezultat = tmp * C
}
int main() {
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
int t;
fin >> t; // numarul de seturi de date
int x, y, z, a, b, c, n;
int result;
for (int i = 0; i < t; i++) {
fin >> x >> y >> z >> a >> b >> c >> n;
result = 0;
int C[KMAX][KMAX] = { {0, 0, c},
{1, 0, b},
{0, 1, a}};
power_matrix(C, n - 2, C);
result = ((1LL * x * C[0][2]) % MOD + (1LL * y * C[1][2]) + (1LL * z * C[2][2])) % MOD;
result = result % MOD;
fout << result << endl;
}
fin.close();
fout.close();
return 0;
}