Pagini recente » Cod sursa (job #2659770) | Cod sursa (job #2638391) | Cod sursa (job #627753) | Cod sursa (job #403613) | Cod sursa (job #690017)
Cod sursa(job #690017)
#include<stdio.h>
#define MODULO 666013
int SOL[4][4],MAT[4][4],T;
void deschidere()
{
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
}
void inmultirematrice(int A[][4],int B[][4],int C[][4])
{
int i,j,k;
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
{
A[i][j]=0;
for(k=1;k<=3;k++)
A[i][j]+=( (B[i][k]%MODULO) * (C[k][j]%MODULO) )%MODULO;
}
}
void atribuire(int A[][4],int B[][4])
{
int i,j;
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
A[i][j]=B[i][j];
}
void explog(int P)
{
int AUX[4][4];
if(P!=1)
if(P%2)
{explog(P-1);inmultirematrice(AUX,SOL,MAT);atribuire(SOL,AUX);}
else
{explog(P/2);inmultirematrice(AUX,SOL,SOL);atribuire(SOL,AUX);}
}
void citire()
{
int X,Y,Z,A,B,C,N,i,j;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d%d%d%d",&X,&Y,&Z,&A,&B,&C,&N);
MAT[1][1]=A;MAT[1][2]=B;MAT[1][3]=C;
MAT[2][1]=1;MAT[2][2]=0;MAT[2][3]=0;
MAT[3][1]=0;MAT[3][2]=1;MAT[3][3]=0;
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
SOL[i][j]=MAT[i][j];
explog(N-2);
printf("%d\n",( (Z%MODULO) * (SOL[1][1]%MODULO) ) + ( (Y%MODULO) * (SOL[1][2])%MODULO) + ((X%MODULO)* (SOL[1][3])%MODULO) );
}
}
int main()
{
deschidere();
citire();
return 0;
}