Pagini recente » Cod sursa (job #546546) | Cod sursa (job #604884) | Cod sursa (job #2235049) | Cod sursa (job #1507789) | Cod sursa (job #987508)
Cod sursa(job #987508)
#include<stdio.h>
#include<string.h>
#define MOD 666013
int a,b,c,x,y,z;
struct Matrix {
int m[5][5];
};
Matrix mult (Matrix a, Matrix b) {
long long i,j,k;
Matrix res;
memset(res.m,0,sizeof(res.m));
for(i = 1 ; i < 4 ;i++)
for(j = 1 ; j < 4 ;j++)
for(k = 1 ; k < 4 ; k++)
res.m[i][j] = (res.m[i][j] + (a.m[i][k] * b.m[k][j]) % MOD) % MOD;
return res;
}
Matrix lgPow (Matrix a, int p) {
if(p == 1) return a;
if(p & 1)
return mult(a,lgPow(a,p-1));
Matrix jum;
jum=lgPow(a,p / 2);
return mult(jum,jum);
}
int main () {
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
int n,tc;
Matrix M;
scanf("%d",&tc);
while(tc) {
scanf("%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
memset(M.m,0,sizeof(M.m));
M.m[1][2]=M.m[2][3]=1;
M.m[3][1]=c;
M.m[3][2]=b;
M.m[3][3]=a;
M = lgPow(M,n-2);
printf("%d\n",((x * M.m[3][1]) % MOD + (y * M.m[3][2]) % MOD + (z * M.m[3][3]) % MOD) % MOD);
tc--;
}
return 0;
}