Cod sursa(job #233332)

Utilizator peanutzAndrei Homorodean peanutz Data 17 decembrie 2008 16:08:04
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#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])
{
	memset(aux, 0, sizeof(aux));
	for(int i = 1; i <= 3; ++i)
		for(int j = 1; j <= 3; ++j)
			for(int 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);

		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;
}