Pagini recente » Cod sursa (job #834721) | Cod sursa (job #947737) | Cod sursa (job #1183573) | Cod sursa (job #11947) | Cod sursa (job #405427)
Cod sursa(job #405427)
#include<stdio.h>
#include<string.h>
#define modulo 666013
void inmult( int a[3][3], int b[3][3])
{
int c[3][3];memset(c,0,sizeof(c));
for( int i = 0; i <= 2; ++i)
for( int j = 0; j < 3; ++j)
for( int k = 0; k < 3; ++k)
{
c[i][j] = (c[i][j] + (long long)a[i][k] * b[k][j])% modulo;
}
for( int i = 0; i < 3; ++i)
for( int j = 0; j <= 2; ++j)
a[i][j] = c[i][j];
}
int main()
{
int T;
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
scanf("%d", &T);
while( T-- )
{
int X,Y,Z,A,B,C,N,M[3][3], rez[3][3];
scanf("%d %d %d %d %d %d %d",&X,&Y,&Z,&A,&B,&C,&N);
M[0][0] = M[0][2] = M[1][0] = M[1][1] = 0;
M[0][1] = M[1][2] = 1; M[2][0] = C; M[2][1] = B; M[2][2] = A;
rez[0][0] = rez[1][1] = rez[2][2] = 1;
rez[0][1] = rez[0][2] = rez[1][0] = rez[1][2] = rez[2][0] = rez[2][1] = 0;
unsigned int p = 1;
while( N )
{
if( N & p)
{
inmult(rez,M);
N^=p;
}
inmult(M,M);
p <<= 1;
}
int aux[3][3];
aux[0][1] = aux[0][2] = aux[1][1] = aux[1][2] = aux[2][1] = aux[2][2] = 0; aux[0][0] = X; aux[1][0] = Y; aux[2][0] = Z;
inmult( rez, aux);
printf("%d\n", rez[0][0]);
}
return 0;
}