Pagini recente » Cod sursa (job #1692690) | Cod sursa (job #1562568) | Cod sursa (job #764648) | Cod sursa (job #2751277) | Cod sursa (job #495545)
Cod sursa(job #495545)
# include <cstdio>
const char *FIN = "iepuri.in", *FOU = "iepuri.out" ;
const int MOD = 666013;
int Mat[3][3], M[3][3] ;
int X, Y, Z, A, B, C, N, T ;
inline void mult ( int A[3][3], int B[3][3] ) {
int C[3][3] ;
for ( int i = 0; i < 3; ++i ) {
for ( int j = 0; j < 3; ++j ) {
C[i][j] = 0 ;
for ( int k = 0; k < 3; ++k ) {
C[i][j] += 1LL * A[i][k] * B[k][j] % MOD ;
if ( C[i][j] >= MOD ) C[i][j] -= MOD ;
}
}
}
for ( int i = 0; i < 3; ++i ) {
for ( int j = 0; j < 3; ++j ) {
A[i][j] = C[i][j] ;
}
}
}
inline void powr ( int P, int M[3][3] ) {
for ( int i = 0; 1 << i <= P; ++i ) {
if ( 1 << i & P ) {
mult ( M, Mat ) ;
}
mult ( Mat, Mat ) ;
}
}
void solve ( void ){
Mat[0][0] = A, Mat[0][1] = B, Mat[0][2] = C ;
Mat[1][0] = 1, Mat[1][1] = 0, Mat[1][2] = 0 ;
Mat[2][0] = 0, Mat[2][1] = 1, Mat[2][2] = 0 ;
for ( int i = 0; i < 3; ++i ) {
for ( int j = 0; j < 3; ++j ) {
M[i][j] = i == j ? 1 : 0 ;
}
}
powr ( N - 2, M ) ;
printf ( "%d\n", 1LL * M[0][0] * Z % MOD + 1LL * M[0][1] * Y % MOD + 1LL * M[0][2] * X % MOD ) ;
}
int main ( void ) {
freopen ( FIN, "r", stdin ) ;
freopen ( FOU, "w", stdout ) ;
for ( scanf ( "%d", &T ) ; T ; --T ) {
scanf ( "%d %d %d %d %d %d %d", &X, &Y, &Z, &A, &B, &C, &N ) ;
solve () ;
}
}