Pagini recente » Cod sursa (job #1943278) | Cod sursa (job #636102) | Cod sursa (job #2485562) | Cod sursa (job #1402535) | Cod sursa (job #2593713)
#include <fstream>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
typedef int mat[3][3];
const int r = 666013;
void inmul(mat a, mat b, mat c)
{
int i, j, k;
for (i = 0; i<3; i++)
for (j = 0; j<3; j++)
c[i][j] = 0;
for (i = 0; i<3; i++)
for (j = 0; j<3; j++)
for (k = 0; k<3; k++)
c[i][j] = (c[i][j] + 1ll*a[i][k]*b[k][j])%r;
}
void copie(mat a, mat b)
{
//a <- b
int i, j;
for (i = 0; i<3; i++)
for (j = 0; j<3; j++)
a[i][j] = b[i][j];
}
void exp(mat a, int e, mat rez)
{
mat aux;
rez[0][0] = rez[1][1] = rez[2][2] = 1;
while (e > 0)
{
if (e&1)
{
copie(aux, rez);
inmul(aux, a, rez);
}
copie(aux, a);
inmul(aux, aux, a);
e >>= 1;
}
}
int main()
{
int t, x, y, z, a, b, c, i, n;
fin >> t;
for (i = 1; i<=t; ++i)
{
fin >> x >> y >> z >> a >> b >> c >> n;
mat init = {
{0, 0, c},
{1, 0, b},
{0, 1, a}
};
mat f = {};
if (n == 0)
fout << x << '\n';
else if (n == 1)
fout << y << '\n';
else if (n == 2)
fout << z << '\n';
else
{
exp(init, n-2, f);
fout << (1ll*x*f[0][2] + 1ll*y*f[1][2] + 1ll*z*f[2][2])%r << '\n';
}
}
return 0;
}