Pagini recente » Cod sursa (job #2455507) | Cod sursa (job #2866383) | Cod sursa (job #1799030) | Cod sursa (job #2953070) | Cod sursa (job #1840650)
#include <iostream>
#include <fstream>
#include <cstring>
#define mod 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
long long T , X , Y , Z , A , B , C , N ;
long long MATRIX[4][4];
long long O3[4][4];
long long aux[4][4];
void refill ()
{
memset ( MATRIX , 0 , sizeof MATRIX );
MATRIX[1][3] = C;
MATRIX[2][3] = B;
MATRIX[3][3] = A;
MATRIX[2][1] = 1;
MATRIX[3][2] = 1;
memset(O3,0,sizeof O3);
O3[1][1] = O3[2][2] = O3[3][3] = 1;
memset(aux,0,sizeof aux);
}
void inmultire ( long long A[4][4] , long long B[4][4] )
{
long long C[4][4];
memset(C,0,sizeof C);
for ( int i = 1; i <= 3; i++ )
{
for ( int j = 1; j <= 3 ; j++ )
{
for ( int k = 1; k <= 3 ; k++ )
C[i][j] += A[i][k] * B[k][j] ;
}
}
for ( int i = 1; i <= 3; i++ )
for ( int j = 1; j <= 3; j++ )
A[i][j] = C[i][j]%mod;
}
void exp_log ( long long A[4][4] , long long N )
{
while ( N )
{
if ( N % 2 == 1 )
{
N--;
inmultire(O3,A);
}
N = N / 2;
inmultire(A,A);
}
}
void multiply ( long long A[4][4] , long long B[4][4] )
{
int C[4][4];
C[1][1] = (A[1][1]*B[1][1] + A[1][2]*B[2][1] + A[1][3]*B[3][1])%mod;
C[1][2] = (A[1][1]*B[1][2] + A[1][2]*B[2][2] + A[1][3]*B[2][3])%mod;
C[1][3] = (A[1][1]*B[1][3] + A[1][2]*B[2][3] + A[1][3]*B[3][3])%mod;
for ( int i = 1; i <= 3; i++ )
for ( int j = 1; j <= 3; j++ )
A[i][j] = C[i][j]%mod;
}
int main()
{
f >> T ;
for ( ; T-- ; )
{
f >> X >> Y >> Z >> A >> B >> C >> N ;
refill();
aux[1][1] = X;
aux[1][2] = Y;
aux[1][3] = Z;
exp_log(MATRIX,N);
inmultire(aux,O3);
g << aux[1][1] << "\n" ;
}
return 0;
}