Pagini recente » Cod sursa (job #2516083) | Cod sursa (job #1898394) | Cod sursa (job #1843249) | Cod sursa (job #140245) | Cod sursa (job #143803)
Cod sursa(job #143803)
#include <stdio.h>
long X, Y, Z, A, B, C, N, T;
long M[3][3];
long M_N[3][3];
long M_NEW[3][3];
int X1, X2, X3;
void read()
{
scanf("%ld%ld%ld%ld%ld%ld%ld", &X, &Y, &Z, &A, &B, &C, &N);
}
void multM()
{
int i, j, k, l;
for(i=0; i<3; i++)
for(j=0; j<3; j++)
M_NEW[i][j] = 0;
for(i=0; i<3; i++)
for(j=0; j<3; j++)
for(k=0; k<3; k++)
M_NEW[i][j] += M[i][k]*M[k][j];
for(i=0; i<3; i++)
for(j=0; j<3; j++)
M[i][j] = M_NEW[i][j];
}
void multMM()
{
int i, j, k;
for(i=0; i<3; i++)
for(j=0; j<3; j++)
M_NEW[i][j] = 0;
for(i=0; i<3; i++)
for(j=0; j<3; j++)
for(k=0; k<3; k++)
M_NEW[i][j] += M[i][k]*M_N[k][j];
for(i=0; i<3; i++)
for(j=0; j<3; j++)
M[i][j] = M_NEW[i][j];
}
void putM(int n)
{
if(n > 1)
{
if(n%2)
{
putM((n-1)/2);
multM();
multMM();
}
else
{
putM(n/2);
multM();
}
}
}
void solve()
{
M[0][0] = M_N[0][0] = 0;
M[0][1] = M_N[0][1] = 1;
M[0][2] = M_N[0][2] = 0;
M[1][0] = M_N[1][0] = 0;
M[1][1] = M_N[1][1] = 0;
M[1][2] = M_N[1][2] = 1;
M[2][0] = M_N[2][0] = C;
M[2][1] = M_N[2][1] = B;
M[2][2] = M_N[2][2] = A;
putM(N-2);
}
int main()
{
freopen("iepuri.in", "r", stdin);
freopen("iepuri.out", "w", stdout);
scanf("%d", &T);
while(T)
{
read();
solve();
printf("%ld\n", (X*M[2][0]) % 666013
+ (Y*M[2][1]) % 666013
+ (Z*M[2][2]) % 666013
);
T--;
}
return 0;
}