Pagini recente » Cod sursa (job #2099750) | Cod sursa (job #1499731) | Cod sursa (job #1580029) | Cod sursa (job #2428208) | Cod sursa (job #423865)
Cod sursa(job #423865)
#include <stdio.h>
#define MOD 666013
unsigned int* mult(unsigned int* m1, unsigned int* m2)
{
unsigned int* res = new unsigned int[9];
for(int i=0;i<3;++i)
{
for(int j=0;j<3;++j)
{
res[i*3+j] = 0;
for(int k=0;k<3;++k)
res[i*3+j] += (((long)(m1[i*3+k]))*m2[k*3+j]) % MOD;
res[i*3+j] %= MOD;
}
}
/* for(i=0;i<3;++i)
{
for(int j=0;j<3;++j)
printf("%d ", res[i*3+j]);
printf("\n");
}
*/ return res;
}
unsigned int* matpow(unsigned int* matr, int p)
{
if(p == 1)
{
unsigned int* res = new unsigned int[9];
for(int i=0;i<9;++i)
res[i] = matr[i];
return res;
}
if(p%2 == 0)
{
unsigned int* m1 = matpow(matr, p/2);
unsigned int* res = mult(m1, m1);
delete[] m1;
return res;
}
return mult(matr, matpow(matr, p-1));
}
int main(void)
{
freopen("iepuri.in", "r", stdin);
freopen("iepuri.out", "w", stdout);
int t;
int i;
scanf("%d", &t);
for(i=0;i<t;++i)
{
int x,y,z,a,b,c,n;
scanf("%d %d %d %d %d %d %d", &x, &y, &z, &a ,&b, &c, &n);
unsigned int matr[] = {0,0,c,1,0,b,0,1,a};
unsigned int* res = matpow(matr, n-2);
int p = (((long)x)*res[2] % MOD + ((long)y)*res[5] % MOD + ((long)z)*res[8] % MOD) % MOD;
printf("%d\n", p);
delete[] res;
}
return 0;
}