Pagini recente » Cod sursa (job #803309) | Cod sursa (job #1402933) | Cod sursa (job #800984) | Cod sursa (job #342872) | Cod sursa (job #1712352)
#include <stdio.h>
#include <stdlib.h>
#define MOD 666013
long long M[3][3], fin[3][3];
inline void multiply(long long answer[3][3], long long M[3][3], long long N[3][3]){
long long i, j, k;
for(i=0;i<3;i++)
for(j=0;j<3;j++){
answer[i][j]=0;
for(k=0;k<3;k++)
answer[i][j]+=M[i][k]*N[k][j];
answer[i][j]%=MOD;
}
}
inline void identity(long long M[3][3]){
for(long long i=0;i<3;i++)
M[i][i]=1;
}
inline void pow(long long answer[3][3], long long M[3][3], long long exp){
long long tmp[3][3];
identity(answer);
while(exp>0){
if(exp%2==1){
multiply(tmp, answer, M);
for(long long i=0;i<3;i++)
for(long long j=0;j<3;j++)
answer[i][j]=tmp[i][j];
}
multiply(tmp, M, M);
for(long long i=0;i<3;i++)
for(long long j=0;j<3;j++)
M[i][j]=tmp[i][j];
exp/=2;
}
}
int main(){
int t;
FILE*fi,*fo;
fi=fopen("iepuri.in","r");
fo=fopen("iepuri.out","w");
fscanf(fi,"%d", &t);
for(int i=1;i<=t;i++){
int x, y, z, a, b, c, n;
fscanf(fi,"%d%d%d%d%d%d%d", &x, &y, &z, &a, &b, &c, &n);
for(int j=0;j<3;j++)
for(int k=0;k<3;k++)
fin[j][k]=0;
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;
pow(fin, M, n);
long long ans[3][3];
long long P[3][3];
P[0][0]=x;
P[1][0]=y;
P[2][0]=z;
/*for(int j=0;j<3;j++){
for(int k=0;k<3;k++)
printf("%lld ", fin[j][k]);
printf("\n");
}*/
multiply(ans, fin, P);
fprintf(fo,"%lld\n", ans[0][0]);
}
fclose(fi);
fclose(fo);
return 0;
}