Pagini recente » Cod sursa (job #2819983) | Cod sursa (job #190814) | Cod sursa (job #2036151) | Cod sursa (job #2102824) | Cod sursa (job #1727964)
#include <fstream>
#include <vector>
using namespace std;
int X, Y, Z, A, B, C;
void multiplyMatrices(vector<vector<int>>& a, vector<vector<int>> b) {
vector<vector<int>> c{ {0,0,0},{0,0,0},{0,0,0} };
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 3; k++) {
//c[i][j] += ((a[i][k] * b[k][j]) % 666013);
c[i][j] %= 666013;
c[i][j] += ((a[i][k] % 666013) * (b[k][j] % 666013)) % 666013;
}
c[i][j] %= 666013;
}
}
a = c;
}
vector<vector<int>> characteristicMatrix(long long p) {
vector<vector<int>> M{ {0,1,0},{0,0,1},{C,B,A} }; // M
vector<vector<int>> r{ {1,0,0},{0,1,0},{0,0,1} }; // I3
while (p > 0) {
if (p % 2 == 1) {
multiplyMatrices(r, M);
--p;
}
multiplyMatrices(M, M);
p /= 2;
}
return r;
}
int main() {
int T;
long long N;
ifstream f("iepuri.in");
f >> T;
ofstream g("iepuri.out");
for (int i = 0; i < T; i++) {
f >> X >> Y >> Z >> A >> B >> C >> N;
vector<vector<int>> M = characteristicMatrix(N - 2);
int sol = 0;
sol = (sol + (M[2][0] * X)) % 666013;
sol = (sol + (M[2][1] * Y)) % 666013;
sol = (sol + (M[2][2] * Z)) % 666013;
g << sol << "\n";
}
f.close();
g.close();
return 0;
}