Pagini recente » Cod sursa (job #1743324) | Cod sursa (job #1188382) | Cod sursa (job #2274337) | Cod sursa (job #2207095) | Cod sursa (job #1208434)
#include <fstream>
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
long long x,y,z,a,b,c,n,A[4][4],m,B[4][4],sol[4][4],sol2[4][4],t;
void inm(long long B[][4],long long A[][4])
{
B[1][1]=(A[1][1]*A[1][1])%666013+(A[1][2]*A[2][1])%666013+(A[1][3]*A[3][1])%666013;
B[1][2]=(A[1][1]*A[1][2])%666013+(A[1][2]*A[2][2])%666013+(A[1][3]*A[3][2])%666013;
B[1][3]=(A[1][1]*A[1][3])%666013+(A[1][2]*A[2][3])%666013+(A[1][3]*A[3][3])%666013;
B[2][1]=(A[2][1]*A[1][1])%666013+(A[2][2]*A[2][2])%666013+(A[2][3]*A[3][1])%666013;
B[2][2]=(A[2][1]*A[1][2])%666013+(A[2][2]*A[2][2])%666013+(A[2][3]*A[3][2])%666013;
B[2][3]=(A[2][1]*A[1][3])%666013+(A[2][2]*A[2][3])%666013+(A[2][3]*A[3][3])%666013;
B[3][1]=(A[3][1]*A[1][1])%666013+(A[3][2]*A[2][1])%666013+(A[3][3]*A[3][1])%666013;
B[3][2]=(A[3][1]*A[1][2])%666013+(A[3][2]*A[2][2])%666013+(A[3][3]*A[3][2])%666013;
B[3][3]=(A[3][1]*A[1][3])%666013+(A[3][2]*A[2][3])%666013+(A[3][3]*A[3][3])%666013;
}
void inm2(long long C[][4],long long B[][4],long long A[][4])
{
C[1][1]=(B[1][1]*A[1][1])%666013+(B[1][2]*A[2][1])%666013+(B[1][3]*A[3][1])%666013;
C[1][2]=(B[1][1]*A[1][2])%666013+(B[1][2]*A[2][2])%666013+(B[1][3]*A[3][2])%666013;
C[1][3]=(B[1][1]*A[1][3])%666013+(B[1][2]*A[2][3])%666013+(B[1][3]*A[3][3])%666013;
C[2][1]=(B[2][1]*A[1][1])%666013+(B[2][2]*A[2][1])%666013+(B[2][3]*A[3][1])%666013;
C[2][2]=(B[2][1]*A[1][2])%666013+(B[2][2]*A[2][2])%666013+(B[2][3]*A[3][2])%666013;
C[2][3]=(B[2][1]*A[1][3])%666013+(B[2][2]*A[2][3])%666013+(B[2][3]*A[3][3])%666013;
C[3][1]=(B[3][1]*A[1][1])%666013+(B[3][2]*A[2][1])%666013+(B[3][3]*A[3][1])%666013;
C[3][2]=(B[3][1]*A[1][2])%666013+(B[3][2]*A[2][2])%666013+(B[3][3]*A[3][2])%666013;
C[3][3]=(B[3][1]*A[1][3])%666013+(B[3][2]*A[2][3])%666013+(B[3][3]*A[3][3])%666013;
}
void atrib(long long A[][4],long long B[][4])
{
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
A[i][j]=B[i][j];
}
int main()
{
f>>t;
for(int i=1;i<=t;i++)
{
f>>x>>y>>z>>a>>b>>c>>n;
m=n-2;
A[1][1]=a;A[1][2]=b;A[1][3]=c;
A[2][1]=1;A[2][2]=0;A[2][3]=0;
A[3][2]=1;A[3][1]=0;A[3][3]=0;
sol[1][1]=sol[2][2]=sol[3][3]=1;
sol[1][2]=sol[1][3]=sol[2][1]=sol[2][3]=sol[3][1]=sol[3][2]=0;
B[1][2]=B[1][3]=B[2][1]=B[2][3]=B[3][1]=B[3][2]=0;
B[1][1]=B[2][2]=B[3][3]=1;
while(m!=0)
{
int r=m%2;
if(r==1)
{
atrib(sol2,sol);
inm2(sol,sol2,A);
}
inm(B,A);
atrib(A,B);
m=m/2%666013;
}
g<<z*sol[1][1]%666013+y*sol[1][2]%666013+x*sol[1][3]%666013<<'\n';
}
return 0;
}