Pagini recente » Cod sursa (job #1908947) | Cod sursa (job #2357595) | Cod sursa (job #2704631) | Cod sursa (job #2945876) | Cod sursa (job #2328847)
#include <fstream>
using namespace std;
ifstream fin( "iepuri.in" );
ofstream fout( ".iepuri.out" );
const int MOD = 666013;
int nr_task;
int N;
int X, Y, Z, A, B, C;
int mat[4][4], aux[4][4], init[4][4];
void Quick_exp( int pow );
void Read()
{
fin >> nr_task;
for( int i = 1; i <= nr_task; ++i )
{
fin>>X>>Y>>Z>>A>>B>>C>>N;
init[1][1] = 0; init[1][2] = 0; init[1][3] = C;
init[2][1] = 1; init[2][2] = 0; init[2][3] = B;
init[3][1] = 0; init[3][2] = 1; init[3][3] = A;
for( int i = 1; i <= 3; ++i )
for( int j = 1; j <= 3; ++j )
mat[i][j] = init[i][j];
Quick_exp( N - 2 );
fout << ( ( 1LL * X * mat[1][3] ) % MOD + ( 1LL * Y * mat[2][3] ) % MOD + ( 1LL * Z * mat[3][3] ) % MOD ) << '\n';
}
}
void Quick_exp( int pow )
{
if( pow <= 1 ) return;
Quick_exp( pow / 2 );
for( int i = 1; i <= 3; ++i )
for( int j = 1; j <= 3; ++j )
{
aux[i][j] = 0;
for( int J = 1, I = 1; J <= 3; ++J, ++I )
aux[i][j] += ( 1LL * mat[i][J] * mat[I][j] ) % MOD;
aux[i][j] %= MOD;
}
if( pow % 2 )
{
for( int i = 1; i <= 3; ++i )
for( int j = 1; j <= 3; ++j )
mat[i][j] = aux[i][j];
for( int i = 1; i <= 3; ++i )
for( int j = 1; j <= 3; ++j )
{
aux[i][j] = 0;
for( int J = 1, I = 1; J <= 3; ++J, ++I )
aux[i][j] += ( 1LL * mat[i][J] * init[I][j] ) % MOD;
aux[i][j] %= MOD;
}
}
for( int i = 1; i <= 3; ++i )
for( int j = 1; j <= 3; ++j )
mat[i][j] = aux[i][j];
}
int main()
{
Read();
return 0;
}