Pagini recente » Cod sursa (job #1151608) | Cod sursa (job #893011) | Cod sursa (job #3242134) | Cod sursa (job #31516) | Cod sursa (job #140923)
Cod sursa(job #140923)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int T,
X, Y, Z,
A, B, C,
N;
int M[3][3];
void matprint(int M[3][3]) {
for (int i(0); i < 3; ++i) {
for (int j(0); j < 3; ++j)
cout << M[i][j] << " ";
cout << endl;
}
cout << endl;
}
void matmul(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] = (c[i][j] + a[i][k] * b[k][j]) % 666013;
}
memcpy(a, c, 9*sizeof(c[0][0]));
}
void bfpow(int M[3][3], int N) {
int a[3][3];
memcpy(a, M, 9*sizeof(M[0][0]));
while (N--)
matmul(M, a);
}
int main(int argc, char *argv[]) {
ifstream fin("iepuri.in");
fin >> T;
ofstream fout("iepuri.out");
while (T--) {
fin >> X >> Y >> Z >> A >> B >> C >> N;
M[0][0] = A; M[0][1] = B; M[0][2] = C;
M[1][0] = 1; M[1][1] = 0; M[1][2] = 0;
M[2][0] = 0; M[2][1] = 1; M[2][2] = 0;
if (N == 1)
fout << X % 666013 << endl;
else if (N == 2)
fout << Y % 666013 << endl;
else if (N == 3)
fout << Z % 666013 << endl;
else {
bfpow(M, N - 3);
fout << (M[0][0] * X + M[0][1] * Y + M[0][2] * Z) % 666013 << endl;
}
}
fout.close();
fin.close();
return 0;
}