Pagini recente » Cod sursa (job #2425692) | Cod sursa (job #3039869) | Cod sursa (job #2390936) | Cod sursa (job #2661314) | Cod sursa (job #2586592)
#include<stdio.h>
#define NMAX 4
#define MOD 666013
#define LL long long
int x, y, z, a, b, c, n, T;
LL Mat[NMAX][NMAX], Rez[NMAX][NMAX], R[NMAX][NMAX];
void EXP(LL A[NMAX][NMAX], LL B[NMAX][NMAX]){
for(int i = 1; i <= 3; ++ i)
for(int j = 1; j <= 3; ++ j)
R[i][j] = 0;
for(int i = 1; i <= 3; ++ i)
for(int j = 1; j <= 3; ++ j)
for(int k = 1; k <= 3; ++ k){
R[i][j] += 1LL * A[i][k] * B[k][j];
R[i][j] %= MOD;
if(R[i][j] < 0)
R[i][j] += MOD;
}
for(int i = 1; i <= 3; ++ i)
for(int j = 1; j <= 3; ++ j)
A[i][j] = R[i][j];
}
int main(){
freopen("iepuri.in", "r", stdin);
freopen("iepuri.out", "w", stdout);
for(scanf("%d", &T); T > 0; -- T){
scanf("%d %d %d %d %d %d %d", &x, &y, &z, &a, &b, &c, &n);
Mat[1][1] = Mat[1][2] = Mat[2][2] = Mat[3][1] = 0;
Mat[2][1] = Mat[3][2] = 1;
Mat[1][3] = c;
Mat[2][3] = b;
Mat[3][3] = a;
n -= 2;
for(int i = 1; i <= 3; ++ i)
for(int j = 1; j <= 3; ++ j)
if(i == j)
Rez[i][j] = 1;
else
Rez[i][j] = 0;
while(n){
if(n & 1)
EXP(Rez, Mat);
EXP(Mat, Mat);
n >>= 1;
}
printf("%d\n", (1LL * x * Rez[1][3] % MOD + 1LL * y * Rez[2][3] % MOD + 1LL * z * Rez[3][3] % MOD) % MOD);
}
return 0;
}