Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1685655) | Cod sursa (job #803485)
Cod sursa(job #803485)
#include<stdio.h>
#define MOD 666013
long long M[4][4], sol[4][4], C[4][4], N, rez;
int T;
int x, y, z;
int a, b, c;
void inmult_mat(long long A[4][4], long long B[4][4]) {
int i, j, k;
for(i=1; i<=3; i++)
for(j=1; j<=3; j++)
for(k=1; k<=3; k++)
C[i][j] += ((A[i][k] % MOD) * (B[k][j] % MOD)) % MOD;
for(i=1; i<=3; i++)
for(j=1; j<=3; j++) {
A[i][j] = C[i][j];
C[i][j] = 0;
}
}
void put(long long P) {
for(; P; P>>=1) {
if(P&1)
inmult_mat(sol, M);
inmult_mat(M, M);
}
}
void init_data() {
scanf("%d %d %d %d %d %d %lld",&x,&y,&z,&a,&b,&c,&N);
M[3][1] = c;
M[3][2] = b;
M[3][3] = a;
M[1][2] = M[2][3] = 1;
sol[1][1] = sol[2][2] = sol[3][3] = 1;
N-=2;
}
void reset_data() {
int i, j;
for(i=1; i<=3; i++)
for(j=1; j<=3; j++)
M[i][j] = sol[i][j] = 0;
rez = 0;
}
int main() {
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
scanf("%d",&T);
while(T--) {
init_data();
put(N);
rez = (sol[3][1] * x * 1LL)%MOD + (sol[3][2] * y * 1LL)%MOD + (sol[3][3] * z * 1LL)%MOD;
printf("%lld\n",rez);
reset_data();
}
return 0;
}