Pagini recente » Cod sursa (job #135763) | Cod sursa (job #392307) | Cod sursa (job #2472571) | Cod sursa (job #950857) | Cod sursa (job #762206)
Cod sursa(job #762206)
#include<cstdio>
using namespace std;
int a0,a1,a2,i1,t1,n1,n,x,y,z,A,B,C;
struct str
{
int a[5][5];
};
str rez,mat;
str pow(str x,int c)
{
int i,j,k;
str rez,mat;
long long s;
if(c==1) return x;
if(c%2==0)
{
mat=pow(x,c/2);
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
{
s=0;
for(k=1;k<=3;k++)
s=s+mat.a[i][k]*mat.a[k][j];
rez.a[i][j]=s%666013;
}
return rez;
}
else
{
mat=pow(x,c-1);
mat=pow(x,c/2);
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
{
s=0;
for(k=1;k<=3;k++)
s=s+mat.a[i][k]*x.a[k][j];
rez.a[i][j]=s%666013;
}
return rez;
}
}
int main()
{
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
scanf("%d",&n1);
for(i1=1;i1<=n1;i1++)
{
scanf("%d",&a0);
scanf("%d",&a1);
scanf("%d",&a2);
scanf("%d",&A);
scanf("%d",&B);
scanf("%d",&C);
scanf("%d",&n);
mat.a[1][1]=C;
mat.a[1][2]=0;
mat.a[1][3]=0;
mat.a[2][1]=B;
mat.a[2][2]=1;
mat.a[2][3]=0;
mat.a[3][1]=A;
mat.a[3][2]=0;
mat.a[3][3]=1;
rez=pow(mat,n-1);
printf("%d\n",((a0*rez.a[1][1])%666013+(a1*rez.a[2][1])%666013+(a2*rez.a[3][1])%666013)%666013);
}
return 0;
}