Pagini recente » Cod sursa (job #1130959) | Cod sursa (job #2197358) | Cod sursa (job #2969900) | Cod sursa (job #2726875) | Cod sursa (job #1654211)
#include <algorithm>
#include <bitset>
#include <cmath>
#include <fstream>
#include <iostream>
#include <queue>
#include <stack>
#include <string.h>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
ifstream fin ("iepuri.in");
ofstream fout ("iepuri.out");
const int M = 666013;
ll A[3][3], B[3][3], C[3][3];
void mult(ll a[][3], ll b[][3], ll c[][3]) {
for(int i = 0; i < 3; ++i)
for(int j = 0; j < 3; ++j)
c[i][j] = (a[i][0]*b[0][j] + a[i][1]*b[1][j] + a[i][2]*b[2][j]) % M;
}
void pp(ll a[][3]) {
cout << string(80, '=') << '\n';
for (int i = 0; i < 3; ++i)
cout << a[i][0] << ' ' << a[i][1] << ' ' << a[i][2] << '\n';
}
void go(int p) {
memset(C, 0, sizeof(C));
for(int i = 0; i < 3; ++i)
C[i][i] = 1;
while(p) {
if (p & 1) {
mult(C, A, B);
//pp(B);
memcpy(C, B, sizeof(B));
}
p /= 2;
mult(A, A, B);
memcpy(A, B, sizeof(B));
}
}
int main() {
int T, x, y, z, a, b, c, N;
fin >> T;
while(T--) {
fin >> x >> y >> z >> a >> b >> c >> N;
A[0][0] = a; A[0][1] = b; A[0][2] = c;
A[1][0] = 1; A[1][1] = 0; A[1][2] = 0;
A[2][0] = 0; A[2][1] = 1; A[2][2] = 0;
go(N-2);
//pp(C);
fout << (C[0][0]*z + C[0][1]*y + C[0][2]*x) % M << endl;
}
return 0;
}