Pagini recente » Cod sursa (job #1827518) | Cod sursa (job #1378024) | Cod sursa (job #292373) | Cod sursa (job #2909855) | Cod sursa (job #2554380)
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
const long long MOD = 666013;
class matrix {
private:
int n, m;
public:
vector<vector<int> >a;
matrix()
{
m = n = 0;
}
matrix(int x, int y)
{
m = x;
n = y;
for (int i = 0; i < x; i++)
{
vector<int>v(y);
a.push_back(v);
}
}
matrix operator*(const matrix& other)
{
matrix v(m, other.n);
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
for (int k = 0; k < other.n; k++) {
long long val = 1ll * v.a[i][k] + 1ll * a[i][j] * other.a[j][k];
val %= MOD;
v.a[i][k] = (int)val;
}
return v;
}
matrix operator=(const matrix& other)
{
a.clear();
m = other.m;
n = other.n;
for (int i = 0; i < m; i++)
{
vector<int>v(n);
a.push_back(v);
}
for (int i = 0; i < other.m; i++)
{
for (int j = 0; j < other.n; j++)
a[i][j] = other.a[i][j];
}
return *this;
}
void print()
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
cout << a[i][j] << " ";
cout << "\n";
}
cout << "\n";
}
};
matrix lgput(matrix n, int p)
{
matrix a;
matrix sol(3, 3);
sol.a[0][0] = 1;
sol.a[1][1] = 1;
sol.a[2][2] = 1;
a = n;
for (int i = 0; (1 << i) <= p; i++)
{
if (p & (1 << i))
sol = sol * a;
a = a * a;
}
return sol;
}
int x, y, z, a, b, c, n;
int main()
{
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
int t;
cin >> t;
while (t--)
{
cin >> x >> y >> z >> a >> b >> c >> n;
matrix xyz(1, 3);
matrix be(3, 3);
be.a[0][0] = a;
be.a[1][0] = b;
be.a[2][0] = c;
be.a[0][1] = 1;
be.a[1][2] = 1;
xyz.a[0][0] = z;
xyz.a[0][1] = y;
xyz.a[0][2] = x;
matrix sol = (xyz * lgput(be, n - 3));
long long sum = 0;
sum += (1ll*sol.a[0][0]*a);
sum %= MOD;
sum += (1ll*sol.a[0][1]*b);
sum %= MOD;
sum += (1ll*sol.a[0][2]*c);
sum %= MOD;
cout << sum << "\n";
}
return 0;
}