Pagini recente » Cod sursa (job #476383) | Cod sursa (job #365115) | Cod sursa (job #1939001) | Cod sursa (job #1406104) | Cod sursa (job #690021)
Cod sursa(job #690021)
#include<stdio.h>
#define MODULO 666013
long long int SOL[4][4],MAT[4][4],T;
void deschidere()
{
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
}
void inmultirematrice(long long int A[][4],long long int B[][4],long long int C[][4])
{
long long 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(long long int A[][4],long long int B[][4])
{
long long int i,j;
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
A[i][j]=B[i][j];
}
void explog(long long int P)
{
long long 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()
{
long long int X,Y,Z,A,B,C,N,i,j;
scanf("%lld",&T);
while(T--)
{
scanf("%lld%lld%lld%lld%lld%lld%lld",&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("%lld\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;
}