Pagini recente » Cod sursa (job #3156530) | Cod sursa (job #1520842) | Cod sursa (job #1613694) | Cod sursa (job #1955760) | Cod sursa (job #445004)
Cod sursa(job #445004)
#include <cstdio>
#define infile "iepuri.in"
#define outfile "iepuri.out"
#define MOD 666013
#define ll long long
ll M[4][4]; //matrice ridicata la ^N
ll N,sol;
ll A,B,C;
ll x,y,z;
int T;
void initial()
{
M[1][1]=M[1][3]=M[2][1]=M[2][2]=0;
M[1][2]=M[2][3]=1;
M[3][1]=C; M[3][2]=B; M[3][3]=A;
}
void transf(ll M[4][4],ll X[4][4])
{
int i,j;
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
X[i][j]=M[i][j];
}
void pow(ll M[4][4],ll P)
{
ll X[4][4],Y[4][4],Z[4][4];
int i,j,k;
if(P==1)
return;
else
if(P%2==0)
{
transf(M,X);
pow(X,P/2);
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
{
M[i][j]=0;
for(k=1;k<=3;k++)
{
M[i][j]+=(X[i][k]*X[k][j])%MOD;
M[i][j]%=MOD;
}
}
i=3;
}
else
{
transf(M,X); transf(M,Y);
pow(X,(P-1)/2);
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
{
Z[i][j]=0;
for(k=1;k<=3;k++)
{
Z[i][j]+=(X[i][k]*X[k][j])%MOD;
Z[i][j]%=MOD;
}
}
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
{
M[i][j]=0;
for(k=1;k<=3;k++)
{
M[i][j]+=(Z[i][k]*Y[k][j])%MOD;
M[i][j]%=MOD;
}
}
i=3;
}
}
void solve()
{
initial();
pow(M,N);
sol=(M[1][1]*x)%MOD + (M[1][2]*y)%MOD + (M[1][3]*z)%MOD;
sol%=MOD;
}
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
scanf("%d",&T);
for(;T;T--)
{
scanf("%lld%lld%lld%lld%lld%lld%lld",&x,&y,&z,&A,&B,&C,&N);
solve();
printf("%lld\n",sol);
}
fclose(stdin);
fclose(stdout);
return 0;
}