Pagini recente » Borderou de evaluare (job #503485) | Cod sursa (job #2061974) | Cod sursa (job #1434623) | Cod sursa (job #899817) | Cod sursa (job #470309)
Cod sursa(job #470309)
#include <cstdio>
#define ll long long
ll t,x,y,z,a,b,c,n,q[3][3],rez[3][3],p,out[3][3],i,j,k,sol;
void prod(ll in1[][3],ll in2[][3])
{
int i,j,k;
for (i=0;i<3;++i)
for (j=0;j<3;++j)
for (k=0;k<3;++k)
out[i][j]=(out[i][j]+in1[i][k]*in2[k][j])%666013;
}
int main()
{
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
scanf("%lld",&t);
while (t--)
{
scanf("%lld %lld %lld %lld %lld %lld %lld",&x,&y,&z,&a,&b,&c,&n);
rez[0][0]=rez[1][1]=rez[2][2]=1;
rez[0][1]=rez[0][2]=rez[1][0]=rez[1][2]=rez[2][0]=rez[2][1]=0;
q[0][0]=q[0][1]=q[1][1]=q[2][0]=0;
q[1][0]=q[2][1]=1;
q[0][2]=c;
q[1][2]=b;
q[2][2]=a;
for (p=n-2;p;p>>=1)
{
if (p & 1)
{
out[0][0]=out[0][1]=out[0][2]=out[1][0]=out[1][1]=out[1][2]=out[2][0]=out[2][1]=out[2][2]=0;
prod(rez,q);
for (i=0;i<3;++i)
rez[i][0]=out[i][0],rez[i][1]=out[i][1],rez[i][2]=out[i][2];
}
out[0][0]=out[0][1]=out[0][2]=out[1][0]=out[1][1]=out[1][2]=out[2][0]=out[2][1]=out[2][2]=0;
prod(q,q);
for (i=0;i<3;++i)
q[i][0]=out[i][0],q[i][1]=out[i][1],q[i][2]=out[i][2];
}
sol=(x*rez[0][2]+y*rez[1][2]+z*rez[2][2])%666013;
printf("%lld\n",sol);
}
return 0;
}