Pagini recente » Cod sursa (job #1038616) | Cod sursa (job #2509816) | Cod sursa (job #2768191) | Cod sursa (job #820037) | Cod sursa (job #2341660)
#include <fstream>
#include <cstring>
using namespace std;
#define mod 666013
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
long long a[4][4], a1[4][4], aux[4][4], sol[4][4];
inline void Initializare(long long A, long long B, long long C) {
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;
sol[1][1] = 1; sol[1][2] = sol[1][3] = 0;
sol[2][1] = sol[2][3] = 0; sol[2][2] = 1;
sol[3][1] = sol[3][2] = 0; sol[3][3] = 1;
}
inline void Inmultire(long long a1[4][4], long long a2[4][4]) {
memset(aux, 0, sizeof(aux));
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
for (int k = 1; k <= 3; k++) {
aux[i][j] += (a1[i][k] * a2[k][j] * 1LL) % mod;
aux[i][j] %= mod;
}
}
}
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++)
a1[i][j] = aux[i][j];
}
}
inline void RidicareLaPutere(int N) {
while (N) {
if (N & 1) {
Inmultire(sol, a);
N--;
}
N >>= 1;
Inmultire(a, a);
}
}
inline void Read() {
long long T, X, Y, Z, A, B, C, N;
fin >> T;
long long val;
while (T--) {
fin >> X >> Y >> Z >> A >> B >> C >> N;
Initializare(A, B, C);
RidicareLaPutere(N);
val = 0;
val += (sol[1][1] * 1LL * X) % mod;
val %= mod;
val += (sol[1][2] * 1LL * Y) % mod;
val %= mod;
val += (sol[1][3] * 1LL * Z) % mod;
val %= mod;
fout << val << "\n";
}
}
int main () {
Read();
fin.close(); fout.close(); return 0;
}