Cod sursa(job #588914)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 10 mai 2011 00:33:40
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#define mod 666013

int n, mat[3][3], v[3][3], sol;

void inmultire(int b[3][3], int c[3][3])
{
	int i, j, k, d[3][3];
	for (i=0; i<=2; i++)
		for (j=0; j<=2; j++) d[i][j]=0;
	for (k=0; k<=2; k++)
		for (i=0; i<=2; i++)
			for (j=0; j<=2; j++)
				d[i][j]=(d[i][j]+b[i][k]*c[k][j])%mod;
	for (i=0; i<3; i++)
		for (j=0; j<3; j++) b[i][j]=d[i][j];
}

void pow(int n)
{
	for (; n; n>>=1)
	{
		if (n&1) inmultire(v, mat);
		inmultire(mat, mat);
	}
}

int main()
{
	freopen("iepuri.in","r",stdin);
	freopen("iepuri.out","w",stdout);
	int t, x, y, z, a, b, c, i, j;
	scanf("%d", &t);
	while (t--)
	{
		scanf("%d %d %d %d %d %d %d", &x, &y, &z, &a, &b, &c, &n);
		mat[2][2]=a;
		mat[1][2]=b;
		mat[0][2]=c;
		mat[1][0]=mat[2][1]=1;
		mat[0][0]=mat[0][1]=mat[1][1]=mat[2][0]=0;
		for (i=0; i<3; i++) 
			for (j=0; j<3; j++) v[i][j]=0;
		v[1][1]=v[2][2]=v[0][0]=1;
		pow(n-2);
		sol=(x*v[0][2]%mod+y*v[1][2]%mod+z*v[2][2]%mod)%mod;
		printf("%d\n",sol);
	}
}