Pagini recente » Cod sursa (job #970749) | Cod sursa (job #1208029) | Cod sursa (job #1336844) | Monitorul de evaluare | Cod sursa (job #1219953)
#include <fstream>
#include <cstring>
using namespace std;
ofstream out("iepuri.out");
const int MOD = 666013 ;
int M[3][3] , A[3][3] , X , Y , Z ,a , b , c;
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;
C[i][j]%=MOD;
}
}
}
for( int i = 0 ; i < 3 ; ++i )
for( int j = 0 ; j < 3 ; ++j )
A[i][j] = C[i][j];
}
void poww( int p , int M[3][3] )
{
for( ; p ; p >>=1 )
{
if( p & 1 )
{
mult( M , A );
}
mult( A , A );
}
}
int main()
{
ifstream in("iepuri.in");
int T;
in >> T;
for( ; T ; --T )
{
int n;
in >> X >> Y >> Z >> a >> b >> c >> n;
M[1][0] = M[1][1] = M[1][2] = M[2][0] = M[2][1] = M[2][2] = 0;
M[0][0] = X;
M[0][1] = Y;
M[0][2] = Z;
A[0][0] = A[0][1] = A[1][1] = A[2][0] = 0;
A[0][2] = c;
A[1][0] = 1;
A[1][2] = b;
A[2][1] = 1;
A[2][2] = a;
poww( n-2 , M );
out << M[0][2]%MOD<< '\n';
}
return 0;
}