Pagini recente » Cod sursa (job #1283839) | Plantatie | Cod sursa (job #816591) | Cod sursa (job #1441321) | Cod sursa (job #1541888)
#include<cstdio>
FILE *in = fopen("iepuri.in","r");
FILE *out = fopen("iepuri.out","w");
int M[4][4];
int x, y, z, a, b, c, n;
int t;
int rez[4][4];
#define MOD 666013
void ridicareM(int n){
int copieRez[4][4];
int copieM[4][4];
int s;
rez[1][2] = rez[1][3] = rez[2][1] = rez[2][3] = rez[3][1] = rez[3][2] = 0;
rez[1][1] = rez[2][2] = rez[3][3] = 1;
while(n != 0){
if(n % 2 == 1){
--n;
for(int i = 1; i <= 3; ++i)
for(int j = 1; j <= 3; ++j)
copieRez[i][j] = rez[i][j];
for(int i = 1; i <= 3; ++i)
for(int j = 1; j <= 3; ++j){
s = 0;
for(int k = 1; k <= 3; ++k)
s = (s + copieRez[i][k] * M[k][j] % MOD) % MOD;
rez[i][j] = s;
}
}
else{
n /= 2;
for(int i = 1; i <= 3; ++i)
for(int j = 1; j <= 3; ++j)
copieM[i][j] = M[i][j];
for(int i = 1; i <= 3; ++i)
for(int j = 1; j <= 3; ++j){
s = 0;
for(int k = 1; k <= 3; ++k)
s = (s + copieM[i][k] * copieM[k][j] % MOD) % MOD;
M[i][j] = s;
}
}
}
}
int solve(int x, int y, int z, int a, int b, int c, int n){
M[1][1] = 0;
M[1][2] = 0;
M[1][3] = c;
M[2][1] = 1;
M[2][2] = 0;
M[2][3] = b;
M[3][1] = 0;
M[3][2] = 1;
M[3][3] = a;
ridicareM(n - 2);
return ((x * rez[1][3] % MOD + y * rez[2][3] % MOD + z * rez[3][3] % MOD) % MOD);
}
void read(){
fscanf(in, "%d", &t);
for(int i = 1; i <= t; ++i){
fscanf(in, "%d %d %d %d %d %d %d", &x, &y, &z, &a, &b, &c, &n);
fprintf(out, "%d\n", solve(x, y, z, a, b, c, n));
}
}
int main(){
read();
return 0;
}