Pagini recente » Cod sursa (job #3290981) | Cod sursa (job #3244236) | Cod sursa (job #3286609) | Cod sursa (job #1213260) | Cod sursa (job #3289857)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
long mod = 666013;
void mult(int a[3][3], int b[3][3]) {
int c[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
c[i][j] = 0;
for (int k = 0; k < 3; k++) {
c[i][j] += (1LL * a[i][k] * b[k][j]) % mod;
}
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
a[i][j] = c[i][j];
}
}
}
void exp(int base[3][3], int N, int ans[3][3]) {
while (N) {
if (N % 2 == 0) {
mult(base, base);
N /= 2;
} else {
mult(ans, base);
N--;
}
}
}
int solve(int mat[3][3], int x, int y, int z, int N) {
int res[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
res[i][j] = (i == j);
}
}
exp(mat, N - 2, res);
return (((1LL * x * res[0][2]) % mod + (1LL * y * res[1][2]) % mod) % mod + (1LL * z * res[2][2]) % mod) % mod;
}
int main() {
int n;
f >> n;
int mat[3][3];
for (int i = 0; i < n; i++) {
int x, y, z, a, b, c, N;
f >> x >> y >> z >> a >> b >> c >> N;
mat[0][0] = 0;
mat[0][1] = 0;
mat[1][0] = 1;
mat[1][1] = 0;
mat[2][0] = 0;
mat[2][1] = 1;
mat[0][2] = c;
mat[1][2] = b;
mat[2][2] = a;
g << solve(mat, x, y, z, N) << "\n";
}
f.close();
g.close();
return 0;
}