Pagini recente » Cod sursa (job #2553434) | Cod sursa (job #879218) | Cod sursa (job #2192010) | Cod sursa (job #715737) | Cod sursa (job #2871694)
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> multiply_matrix(vector<vector<int>> a, vector<vector<int>> b, int mod) {
if (a.size() < 1 || a[0].size() != b.size()) {
exit(-1);
}
vector<vector<int>> result(a.size(), vector<int>(b[0].size(), 0));
// lungimea unei linii din prima matrice,
// egala cu lungimea unei coloane din a doua matrice
int vector_size = a[0].size();
for (long unsigned i = 0; i < a.size(); ++i) {
for (long unsigned j = 0; j < b[0].size(); ++j) {
for (int k = 0; k < vector_size; ++k) {
result[i][j] = (1LL * result[i][j] + a[i][k] * b[k][j] % mod) % mod;
}
}
}
return result;
}
vector<vector<int>> fast_matrix_pow(vector<vector<int>> base_matrix, int exponent, int mod) {
if (exponent == 0) {
vector<vector<int>> result(base_matrix.size(), vector<int>(base_matrix.size(), 0));
for (long unsigned i = 0; i < base_matrix.size(); ++i) {
result[i][i] = 1;
}
return result;
}
vector<vector<int>> result = fast_matrix_pow(base_matrix, exponent / 2, mod);
if (exponent % 2 == 0) {
return multiply_matrix(result, result, mod);
}
return multiply_matrix(base_matrix, fast_matrix_pow(base_matrix, exponent - 1, mod), mod);
}
int main(void) {
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
int t;
cin >> t;
for (int i = 0; i < t; ++i) {
int x, y, z;
cin >> x >> y >> z;
int a, b, c, n;
cin >> a >> b >> c >> n;
// d day: a*(iepuri[d-1]) + b*(iepuri[d-2])
// + c*(iepuri[d-3])
// [a b c * [iepuri_(d-1) = [iepuri_d
// 1 0 0 iepuri_(d-2) iepuri_(d-1)
// 0 1 0] iepuri_(d-3)] iepuri_(d-2)]
int mod = 666013;
vector<vector<int>> matrix = {{a, b, c}, {1, 0, 0}, {0, 1, 0}};
cout << multiply_matrix(fast_matrix_pow(matrix, (n-2), mod), {{z}, {y}, {x}}, mod)[0][0] << endl;
}
return 0;
}