Pagini recente » Cod sursa (job #2950845) | Cod sursa (job #380033) | Cod sursa (job #1240064) | Cod sursa (job #92238) | Cod sursa (job #2071057)
#include <iostream>
#include <fstream>
using namespace std;
const int mod = 666013;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
int x, y, z, a, b, c, n;
void inmm(long long m[][3])
{
long long t[3][3];
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
for(int k = 0; k < 3; k++)
{
t[i][j] = 0;
for(int k = 0; k < 3; k++)
t[i][j] += m[i][k] * m[k][j] % mod;
}
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
m[i][j] = t[i][j];
}
void inmp(long long m[][3], long long p[][3])
{
long long t[3][3];
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
{
t[i][j] = 0;
for(int k = 0; k < 3; k++)
t[i][j] += m[i][k] * p[k][j] % mod;
}
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
p[i][j] = t[i][j];
}
long long iep(int n)
{
long long m[3][3] = {{0, 0, c}, {1, 0, b}, {0, 1, a}};
long long p[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
while(n > 0)
{
if(n % 2 == 0)
{
n /= 2;
inmm(m);///m*=m;
}
else
{
n--;
inmp(m, p); ///p *= m;
}
}
return (x * p[0][2] + y * p[1][2] + z * p[2][2]) % mod;
}
int main()
{
int nn;
f >> nn;
for(int mm = 1; mm <= nn; mm++)
{
f >> x >> y >> z >> a >> b >> c >> n;
g << iep(n - 2) << '\n';
}
return 0;
}