Cod sursa(job #378735)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 29 decembrie 2009 13:56:25
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<cstdio>
const int Q=666013;
int n,a,b,c,x,y,z,pppp,pp[4][4],A[4][4];
void prod(int X[4][4],int Y[4][4])
{
	int Z[4][4];
	for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)
		{
			Z[i][j]=0;
			for(int k=1;k<=3;k++)
				Z[i][j]=(Z[i][j]+((long long)X[i][k]*Y[k][j])%Q)%Q;
		}
	for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)
			X[i][j]=Z[i][j];
}
void put(int p)
{
    pp[1][1]=1;pp[1][2]=0;pp[1][3]=0;
	pp[2][1]=0;pp[2][2]=1;pp[2][3]=0;
	pp[3][1]=0;pp[3][2]=0;pp[3][3]=1;
    A[1][1]=0;A[1][2]=0;A[1][3]=c;
	A[2][1]=1;A[2][2]=0;A[2][3]=b;
	A[3][1]=0;A[3][2]=1;A[3][3]=a;
    while(p)
    {
        if(p%2==1)
            prod(pp,A);
        prod(A,A);
        p/=2;
    }
	printf("%d\n",((long long)x*pp[1][3]%Q+y*pp[2][3]%Q+z*pp[3][3]%Q)%Q);
}

int main()
{
	freopen("iepuri.in","r",stdin);
	freopen("iepuri.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
    {
        scanf("%d%d%d%d%d%d%d",&a,&b,&c,&x,&y,&z,&pppp);
        put(pppp-2);
    }
	return 0;
}