Pagini recente » Cod sursa (job #459615) | Cod sursa (job #377990) | Cod sursa (job #2085276) | Cod sursa (job #836704) | Cod sursa (job #233333)
Cod sursa(job #233333)
#include <stdio.h>
#include <string.h>
#define MOD 666013
int t, x, y, z, a, b, c, n;
int m[4][4], crt[4][4];
int aux[4][4];
void mul(int a[4][4], int b[4][4])
{
int i, j, k;
memset(aux, 0, sizeof(aux));
for(i = 1; i <= 3; ++i)
for(j = 1; j <= 3; ++j)
for(k = 1; k <= 3; ++k)
aux[i][j] = (aux[i][j] + (a[i][k]*b[k][j]) % MOD) % MOD;
memcpy(a, aux, sizeof(aux));
}
int main()
{
freopen("iepuri.in", "r", stdin);
freopen("iepuri.out", "w", stdout);
scanf("%d", &t);
while(t--)
{
scanf("%d %d %d %d %d %d %d", &x, &y, &z, &a, &b, &c, &n);
if(n == 0)
{
printf("%d\n", x);
continue;
}
if(n == 1)
{
printf("%d\n", y);
continue;
}
if(n == 2)
{
printf("%d\n", z);
continue;
}
crt[1][1] = 0; crt[1][2] = 0; crt[1][3] = c;
crt[2][1] = 1; crt[2][2] = 0; crt[2][3] = b;
crt[3][1] = 0; crt[3][2] = 1; crt[3][3] = a;
int ok = 0;
int val = 1;
for(; val <= n; val <<= 1)
{
if(n & val)
{
if(!ok)
memcpy(m, crt, sizeof(crt)), ok = 1;
else
mul(m, crt);
}
mul(crt, crt);
}
printf("%d\n", ((x*m[1][1])%MOD + (y*m[2][1])%MOD + (z*m[3][1])%MOD) % MOD);
}
return 0;
}