Pagini recente » Cod sursa (job #2477466) | Cod sursa (job #824654) | Cod sursa (job #2940644) | Cod sursa (job #875760) | Cod sursa (job #91493)
Cod sursa(job #91493)
#include<stdio.h>
#include<string.h>
#define mod 666013
FILE *f=fopen("iepuri.in","r"), *g=fopen("iepuri.out","w");
int a[32][4][4];
int A,B,C,X,Y,Z,N,m,i,j,M[4][4],D[4][4],E[4][4],q,T;
bool bin[33];
void matrici(int p)
{
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
{
a[p][i][j]=0;
for(int k=1;k<=3;k++)
a[p][i][j]+=(((a[p-1][i][k]%666013)*(a[p-1][k][j]%666013))%666013);
}
}
void xmatrici(int p)
{
int i,j;
for(i=1;i<=3;i++)
for( j=1;j<=3;j++)
{
D[i][j]=0;
for(int k=1;k<=3;k++)
D[i][j]+=(((M[i][k]%666013)*(a[p][k][j]%666013))%666013);
}
for(i=1;i<=3;i++)
for(j=1;j<=3;j++) M[i][j]=D[i][j];
}
void fmatrici()
{
for(int i=1;i<=3;i++)
for(int j=1;j<=1;j++)
{
D[i][j]=0;
for(int k=1;k<=3;k++)
D[i][j]+=(((M[i][k]%666013)*(E[k][j]%666013))%666013);
}
}
int main()
{
fscanf(f,"%d", &T);
for(i=1;i<=T;i++)
{
fscanf(f,"%d %d %d %d %d %d %d",&X,&Y,&Z,&A,&B,&C,&N);
memset(a, 0, sizeof(a));
memset(M, 0, sizeof(M));
memset(E, 0, sizeof(E));
a[0][1][2]=1;
a[0][2][3]=1;
a[0][3][1]=C;
a[0][3][2]=B;
a[0][3][3]=A;
m=N;
q=0;
while(m)
{
bin[q++]=m%2;
m/=2;
}
M[1][1]=1;
M[2][2]=1;
M[3][3]=1;
for(j=1;j<=q;++j) matrici(j);
for(j=0;j<q;j++)
if(bin[j]) xmatrici(j);
E[1][1]=X;
E[2][1]=Y;
E[3][1]=Z;
fmatrici();
int sum=0;
//sum+=D[1][1]*X; sum%=mod;
//sum+=D[1][2]*Y; sum%=mod;
//sum+=D[1][3]*Z; sum%=mod;
//printf("%d\n", sum);
/*printf("%d\n", D[1][1]);
for(int ii=1;ii<=3;++ii)
{
for(int jj=1;jj<=3;++jj)printf("%d ", D[ii][jj]);
printf("\n");
}
printf("\n");
*/
fprintf(g,"%d\n",D[1][1]);
}
fclose(g);
return 0;
}