Pagini recente » Cod sursa (job #1878167) | Cod sursa (job #2243979) | Cod sursa (job #931214) | ONIS 2014, Runda 2 | Cod sursa (job #326729)
Cod sursa(job #326729)
#include <stdio.h>
#define mod 666013
long long x, y, z, a[4][4], n, sol[4][4], tmp[4][4], t;
void attrib(int dest[4][4], int src[4][4]) {
long long i, j;
for (i=1; i<4; ++i)
for (j=1; j<4; ++j)
dest[i][j]=src[i][j];
}
void mul1(int dest[4][4], int src1[4][4], int src2[4][4]) {
long long i, j, k;
for (i=1; i<4; ++i)
for (j=1; j<4; ++j) {
dest[i][j]=0;
for (k=1; k<4; ++k) dest[i][j]+=(src1[i][k]*src2[k][j])%mod;
dest[i][j]%=mod;
}
}
int main() {
long long i;
freopen("iepuri.in", "r", stdin);
freopen("iepuri.out", "w", stdout);
scanf("%d\n", &t);
for (; t; --t) {
scanf("%lld %lld %lld %lld %lld %lld\n", &x, &y, &z, &a[3][3], &a[3][2], &a[3][1], &n);
a[1][2]=a[2][3]=1;
a[1][1]=a[1][3]=a[2][1]=a[2][2]=0;
sol[3][3]=sol[1][1]=sol[2][2]=1;
sol[1][2]=sol[1][3]=sol[2][1]=sol[2][3]=sol[3][1]=sol[3][2]=0;
for (i=1; i<=n; i<<=1) {
if (i&n) {
mul1(tmp, a, sol);
attrib(sol, tmp);
}
mul1(tmp, a, a);
attrib(a, tmp);
}
printf("%lld\n", ((sol[1][3]*z)%mod+(sol[1][2]*y)%mod+(sol[1][1]*x)%mod)%mod);
}
return 0;
}