Pagini recente » Cod sursa (job #1139238) | Cod sursa (job #2649354) | Cod sursa (job #166003) | Cod sursa (job #299958) | Cod sursa (job #1504409)
#include<stdio.h>
FILE *fin,*fout;
long long int temp[4][4],mat[4][4],n,keep[4][4],x,y,z,a,b,c,t,arr[4],arr2[4];
void inm()
{
for(int i=1;i<4;i++)
{
for(int j=1;j<4;j++)
{
temp[i][j]=0;
for(int k=1;k<4;k++)
{
temp[i][j]+=mat[i][k]*mat[k][j];
temp[i][j]%=666013;
}
}
}
for(int i=1;i<4;i++)
{
for(int j=1;j<4;j++)
{
mat[i][j]=temp[i][j];
}
}
}
void pow(int p)
{
if(p!=1)
{
pow(p/2);
inm();
if(p%2==1)
{
for(int i=1;i<4;i++)
{
for(int j=1;j<4;j++)
{
temp[i][j]=0;
for(int k=1;k<4;k++)
{
temp[i][j]+=mat[i][k]*keep[k][j];
temp[i][j]%=666013;
}
}
}
for(int i=1;i<4;i++)
{
for(int j=1;j<4;j++)
{
mat[i][j]=temp[i][j];
}
}
}
}
}
int main()
{
fin=fopen("iepuri.in","r");
fout=fopen("iepuri.out","w");
fscanf(fin,"%d",&t);
for(int i=0;i<t;i++)
{
fscanf(fin,"%d %d %d %d %d %d %d",&x,&y,&z,&a,&b,&c,&n);
keep[2][1]=1;
keep[3][2]=1;
keep[1][3]=c;
keep[2][3]=b;
keep[3][3]=a;
mat[2][1]=1;
mat[3][2]=1;
mat[1][3]=c;
mat[2][3]=b;
mat[3][3]=a;
arr[1]=x;
arr[2]=y;
arr[3]=z;
pow(n-2);
for(int i=1;i<4;i++)
{
for(int j=1;j<4;j++)
{
arr2[i]+=(arr[j]*mat[j][i]);
arr2[i]%=666013;
}
}
fprintf(fout,"%d\n",arr2[3]);
for(int i=1;i<4;i++)
{
arr2[i]=0;
for(int j=1;j<4;j++)
{
mat[i][j]=0;
}
}
}
}