Pagini recente » Cod sursa (job #2170808) | Cod sursa (job #8237) | Cod sursa (job #1218533) | Cod sursa (job #3290631) | Cod sursa (job #2330210)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
const int MOD = 666013;
int mat[4][4], aux[4][4], init[4][4];
int x, y, z, a, b, c, n;
void expo(int pow)
{
if(pow <= 1) return;
expo(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()
{
int task;
fin >> task;
for( int i = 1; i <= task; ++i)
{
fin >> x >> y >> z >> a >> b >> c >> n;
init[1][1] = init[3][1] = init[1][2] = init[2][2] = 0;
init[2][1] = init[3][2] = 1;
init[1][3] = c;
init[2][3] = b;
init[3][3] = a;
for(int i = 1; i <= 3; ++i)
for(int j = 1; j <= 3; ++j) mat[i][j] = init[i][j];
expo(n-2);
fout << ( 1LL* x * mat[1][3] + 1LL* y * mat[2][3] + 1LL* z * mat[3][3] ) % MOD << "\n";
}
return 0;
}