Pagini recente » Cod sursa (job #2989465) | Cod sursa (job #3285140) | Profil StarGold2 | Cod sursa (job #426351) | Cod sursa (job #5877)
Cod sursa(job #5877)
#include <stdio.h>
#include <string.h>
#define infile "iepuri.in"
#define outfile "iepuri.out"
#define MOD 666013
FILE *fin,*fout;
long long X,Y,Z,A,B,C,N;
void rid_put(long long m[3][3], long long putere, long long M[3][3])
{
if(!putere)
{
M[0][0]=1;M[0][1]=0;M[0][2]=0;
M[1][0]=0;M[1][1]=1;M[1][2]=0;
M[2][0]=0;M[2][1]=0;M[2][2]=1;
return;
}
rid_put(m,putere/2,M);
long long P[3][3];
P[0][0]=M[0][0]*M[0][0]+M[0][1]*M[1][0]+M[0][2]*M[2][0];
P[0][0]%=MOD;
P[0][1]=M[0][0]*M[0][1]+M[0][1]*M[1][1]+M[0][2]*M[2][1];
P[0][1]%=MOD;
P[0][2]=M[0][0]*M[0][2]+M[0][1]*M[1][2]+M[0][2]*M[2][2];
P[0][2]%=MOD;
P[1][0]=M[1][0]*M[0][0]+M[1][1]*M[1][0]+M[1][2]*M[2][0];
P[1][0]%=MOD;
P[1][1]=M[1][0]*M[0][1]+M[1][1]*M[1][1]+M[1][2]*M[2][1];
P[1][1]%=MOD;
P[1][2]=M[1][0]*M[0][2]+M[1][1]*M[1][2]+M[1][2]*M[2][2];
P[1][2]%=MOD;
P[2][0]=M[2][0]*M[0][0]+M[2][1]*M[1][0]+M[2][2]*M[2][0];
P[2][0]%=MOD;
P[2][1]=M[2][0]*M[0][1]+M[2][1]*M[1][1]+M[2][2]*M[2][1];
P[2][1]%=MOD;
P[2][2]=M[2][0]*M[0][2]+M[2][1]*M[1][2]+M[2][2]*M[2][2];
P[2][2]%=MOD;
memcpy(M,P,sizeof(P));
if(putere%2)
{
P[0][0]=C*M[0][2];
P[0][0]%=MOD;
P[0][1]=M[0][0]+B*M[0][2];
P[0][1]%=MOD;
P[0][2]=M[0][1]+A*M[0][2];
P[0][2]%=MOD;
P[1][0]=C*M[1][2];
P[1][0]%=MOD;
P[1][1]=M[1][0]+B*M[1][2];
P[1][1]%=MOD;
P[1][2]=M[1][1]+A*M[1][2];
P[1][2]%=MOD;
P[2][0]=C*M[2][2];
P[2][0]%=MOD;
P[2][1]=M[2][0]+B*M[2][2];
P[2][1]%=MOD;
P[2][2]=M[2][1]+A*M[2][2];
P[2][2]%=MOD;
}
memcpy(M,P,sizeof(P));
}
int main()
{
long long t,sol;
long long m[3][3],M[3][3];
fin=fopen(infile,"r");
fout=fopen(outfile,"w");
fscanf(fin,"%Ld",&t);
while(t)
{
fscanf(fin,"%Ld %Ld %Ld %Ld %Ld %Ld %Ld",&X,&Y,&Z,&A,&B,&C,&N);
m[0][0]=0;m[0][1]=1;m[0][2]=0;
m[1][0]=0;m[1][1]=0;m[1][2]=1;
m[2][0]=C;m[2][1]=B;m[2][2]=A;
rid_put(m,N-2,M);
sol=M[2][0]*X+M[2][1]*Y+M[2][2]*Z;
sol%=MOD;
fprintf(fout,"%Ld\n",sol);
t--;
}
fclose(fin);fclose(fout);
return 0;
}