Pagini recente » Cod sursa (job #1248903) | Cod sursa (job #590023) | Cod sursa (job #780186) | Cod sursa (job #2780473) | Cod sursa (job #2629209)
#include <iostream>
#include <fstream>
#define mod 666013
using namespace std;
ifstream fin ("iepuri.in");
ofstream fout ("iepuri.out");
struct mat
{
int m[3][3];
};
mat produs (mat a, mat b)
{
mat rez;
rez.m[0][0] = (1LL * a.m[0][0] * b.m[0][0] + 1LL * a.m[0][1] * b.m[1][0] + 1LL * a.m[0][2] * b.m[2][0]) % mod;
rez.m[0][1] = (1LL * a.m[0][0] * b.m[0][1] + 1LL * a.m[0][1] * b.m[1][1] + 1LL * a.m[0][2] * b.m[2][1]) % mod;
rez.m[0][2] = (1LL * a.m[0][0] * b.m[0][2] + 1LL * a.m[0][1] * b.m[1][2] + 1LL * a.m[0][2] * b.m[2][2]) % mod;
rez.m[1][0] = (1LL * a.m[1][0] * b.m[0][0] + 1LL * a.m[1][1] * b.m[1][0] + 1LL * a.m[1][2] * b.m[2][0]) % mod;
rez.m[1][1] = (1LL * a.m[1][0] * b.m[0][1] + 1LL * a.m[1][1] * b.m[1][1] + 1LL * a.m[1][2] * b.m[2][1]) % mod;
rez.m[1][2] = (1LL * a.m[1][0] * b.m[0][2] + 1LL * a.m[1][1] * b.m[1][2] + 1LL * a.m[1][2] * b.m[2][2]) % mod;
rez.m[2][0] = (1LL * a.m[2][0] * b.m[0][0] + 1LL * a.m[2][1] * b.m[1][0] + 1LL * a.m[2][2] * b.m[2][0]) % mod;
rez.m[2][1] = (1LL * a.m[2][0] * b.m[0][1] + 1LL * a.m[2][1] * b.m[1][1] + 1LL * a.m[2][2] * b.m[2][1]) % mod;
rez.m[2][2] = (1LL * a.m[2][0] * b.m[0][2] + 1LL * a.m[2][1] * b.m[1][2] + 1LL * a.m[2][2] * b.m[2][2]) % mod;
return rez;
}
mat pow (mat n, int p)
{
mat r;
r.m[0][0] = 1;
r.m[0][1] = 0;
r.m[0][2] = 0;
r.m[1][0] = 0;
r.m[1][1] = 1;
r.m[1][2] = 0;
r.m[2][0] = 0;
r.m[2][1] = 0;
r.m[2][2] = 1;
while (p)
{
if (p % 2 == 1)
r = produs (r, n);
n = produs (n, n);
p /= 2;
}
return r;
}
int main ()
{
int t, i, x, y, z, a, b, c, n;
fin >> t;
for (i = 1; i <= t; i ++)
{
fin >> x >> y >> z >> a >> b >> c >> n;
mat r;
r.m[0][0] = 0;
r.m[0][1] = 0;
r.m[0][2] = c;
r.m[1][0] = 1;
r.m[1][1] = 0;
r.m[1][2] = b;
r.m[2][0] = 0;
r.m[2][1] = 1;
r.m[2][2] = a;
r = pow (r, n - 2);
/*cout << r.m[0][0] << " " << r.m[0][1] << " " << r.m[0][2] << "\n";
cout << r.m[1][0] << " " << r.m[1][1] << " " << r.m[1][2] << "\n";
cout << r.m[2][0] << " " << r.m[2][1] << " " << r.m[2][2] << "\n";*/
fout << (x * r.m[0][2] + y * r.m[1][2] + z * r.m[2][2]) % mod << "\n";
}
}