Pagini recente » Cod sursa (job #1571920) | Cod sursa (job #2883521) | Cod sursa (job #2337323) | Cod sursa (job #3281695) | Cod sursa (job #1215700)
using namespace std;
#include <fstream>
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
const int MOD = 666013;
int fact[3][3], aux[3][3], rez[3][3];
void putere(int) ;
void prod(int a[3][3], int b[3][3], int c[3][3]) ;
void cpy(int a[3][3], int b[3][3]) ;
int main()
{
int a, b, c, x, y, z, n, t;
fin >> t;
for(; t; --t)
{
fin >> x >> y >> z >> a >> b >> c >> n;
fact[0][0] = 0; fact[0][1] = 0; fact[0][2] = c;
fact[1][0] = 1; fact[1][1] = 0; fact[1][2] = b;
fact[2][0] = 0; fact[2][1] = 1; fact[2][2] = a;
putere(n);
fout << (x * rez[0][0] + y * rez[1][0] + z * rez[2][0]) % MOD << '\n';
}
return 0;
}
void putere(int exp)
{
for(int i = 0; i < 3; ++i) for(int j = 0; j < 3; ++j) rez[i][j] = 0;
rez[0][0] = rez[1][1] = rez[2][2] = 1;
while(exp)
{
if(exp & 1 == 1)
{
prod(rez, fact, aux); //aux = rez * fact
cpy(rez, aux);
}
exp >>= 1;
prod(fact, fact, aux);
cpy(fact, aux);
}
}
void prod(int a[3][3], int b[3][3], int c[3][3])
{
//c = a * b
c[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0]; c[0][0] %= MOD;
c[0][1] = a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1]; c[0][1] %= MOD;
c[0][2] = a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2]; c[0][2] %= MOD;
c[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0]; c[1][0] %= MOD;
c[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1]; c[1][1] %= MOD;
c[1][2] = a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[1][2] * b[2][2]; c[1][2] %= MOD;
c[2][0] = a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0]; c[2][0] %= MOD;
c[2][1] = a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1]; c[2][1] %= MOD;
c[2][2] = a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[2][2] * b[2][2]; c[2][2] %= MOD;
}
void cpy(int a[3][3], int b[3][3])
{
for(int i = 0; i < 3; ++i)
for(int j = 0; j < 3; ++j)
a[i][j] = b[i][j];
}