Pagini recente » Cod sursa (job #448136) | Cod sursa (job #910009) | Cod sursa (job #928484) | Cod sursa (job #2945578) | Cod sursa (job #1851536)
#include <cstdio>
#include <cstring>
const int mod = 666013;
void elementul_neutru(int a[3][3]){
memset(a, 0, sizeof a);
for(int i = 0; i < 3; ++ i)
a[i][i] = 1;
}
class Matrix {
public:
int m[3][3];
Matrix() {
memset(m, 0, sizeof m);
}
Matrix(const int k[3][3]) {
for(int i = 0; i < 3; ++ i)
for(int j = 0; j < 3; ++ j)
m[i][j] = k[i][j];
}
Matrix operator * (const Matrix& other) const {
Matrix ans;
for(int i = 0; i <= 2; ++ i)
for(int j = 0; j <= 2; ++ j)
for(int k = 0; k <= 2; ++ k)
ans.m[i][j] = (ans.m[i][j] + (1LL * m[i][k] * other.m[k][j]) % mod) % mod;
return ans;
}
inline void operator = (const Matrix& other) {
for(int i = 0; i < 3; ++ i)
for(int j = 0; j < 3; ++ j)
m[i][j] = other.m[i][j];
}
Matrix operator ^ (int e) const {
Matrix ans, aux;
aux = *this;
elementul_neutru(ans.m);
while(e) {
if(e & 1)
ans = ans * aux;
aux = aux * aux;
e >>= 1;
}
return ans;
}
};
int main() {
freopen("iepuri.in", "r", stdin);
freopen("iepuri.out", "w", stdout);
int T;
for(scanf("%d", &T); T; -- T) {
int x, y, z, A, b, c, N;
scanf("%d %d %d %d %d %d %d", &x, &y, &z, &A, &b, &c, &N);
int a[3][3];
a[0][0] = A; a[1][0] = b; a[2][0] = c;
a[0][1] = 1; a[1][1] = 0; a[2][1] = 0;
a[0][2] = 0; a[1][2] = 1; a[2][2] = 0;
Matrix m = Matrix(a)^(N - 2);
int ans = ((z * m.m[0][0]) % mod + (y * m.m[1][0]) % mod + (x * m.m[2][0]) % mod) % mod;
printf("%d\n", ans);
}
return 0;
}