Pagini recente » Cod sursa (job #2306416) | Cod sursa (job #1071195) | Cod sursa (job #2101122) | Cod sursa (job #207390) | Cod sursa (job #3305496)
#include <bits/stdc++.h>
std::ifstream fin("iepuri.in");
std::ofstream fout("iepuri.out");
const int MAX_D = 4;
const int MOD = 666013;
int T, X, Y, Z, A, B, C, N;
int64_t a[MAX_D][MAX_D], b[MAX_D][MAX_D], s[MAX_D][MAX_D];
int res;
void unitate(int64_t a[][MAX_D]) {
// a <- I_3
for (int i = 1; i < MAX_D; i++) {
for (int j = 1; j < MAX_D; j++)
a[i][j] = 0;
a[i][i] = 1;
}
}
void atrib(int64_t a[][MAX_D], int64_t b[][MAX_D]) {
// a <- b
for (int i = 1; i < MAX_D; i++)
for (int j = 1; j < MAX_D; j++)
a[i][j] = b[i][j];
}
void inmult(int64_t a[][MAX_D], int64_t b[][MAX_D], int64_t c[][MAX_D]) {
// c <- a * b
for (int i = 1; i < MAX_D; i++)
for (int k = 1; k < MAX_D; k++) {
c[i][k] = 0;
for (int j = 1; j < MAX_D; j++)
c[i][k] = (c[i][k] + (int64_t)a[i][j] * b[j][k]) % MOD;
}
}
void exp(int64_t a[][MAX_D], int n, int64_t b[][MAX_D]) {
// b <- a^n
int64_t c[MAX_D][MAX_D];
unitate(b);
while (n > 0) {
if (n & 1) {
inmult(a, b, c);
atrib(b, c);
}
inmult(a, a, c);
atrib(a, c);
n >>= 1;
}
}
int main() {
fin >> T;
while (T--) {
fin >> X >> Y >> Z >> A >> B >> C >> N;
a[1][1] = 0; a[1][2] = 1; a[1][3] = 0;
a[2][1] = 0; a[2][2] = 0; a[2][3] = 1;
a[3][1] = C; a[3][2] = B; a[3][3] = A;
s[1][1] = X; s[2][1] = Y; s[3][1] = Z;
exp(a, N, b);
res = 0;
for (int i = 1; i < MAX_D; i++)
res = (res + (int64_t)b[1][i] * s[i][1]) % MOD;
fout << res << "\n";
}
fin.close();
fout.close();
return 0;
}