Pagini recente » Cod sursa (job #1537113) | Cod sursa (job #1959411) | Cod sursa (job #167668) | Cod sursa (job #2811587) | Cod sursa (job #3229858)
#include <iostream>
#include <fstream>
#include <vector>
const int MOD = 666013;
std::ifstream infile("iepuri.in");
std::ofstream outfile("iepuri.out");
using Matrix = std::vector<std::vector<long long>>;
Matrix matrixMult(const Matrix &A, const Matrix &B, int mod) {
int size = A.size();
Matrix C(size, std::vector<long long>(size, 0));
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
for (int k = 0; k < size; ++k) {
C[i][j] = (C[i][j] + A[i][k] * B[k][j] % mod) % mod;
}
}
}
return C;
}
Matrix matrixPow(Matrix A, long long p, int mod) {
int size = A.size();
Matrix result(size, std::vector<long long>(size, 0));
for (int i = 0; i < size; ++i) {
result[i][i] = 1;
}
while (p > 0) {
if (p % 2 == 1) {
result = matrixMult(result, A, mod);
}
A = matrixMult(A, A, mod);
p /= 2;
}
return result;
}
int main() {
int T;
infile >> T;
while (T--) {
long long X, Y, Z, A, B, C, N;
infile >> X >> Y >> Z >> A >> B >> C >> N;
if (N == 0) {
outfile << X % MOD << std::endl;
continue;
}
if (N == 1) {
outfile << Y % MOD << std::endl;
continue;
}
if (N == 2) {
outfile << Z % MOD << std::endl;
continue;
}
Matrix T = {
{A, B, C},
{1, 0, 0},
{0, 1, 0}
};
Matrix T_pow = matrixPow(T, N - 2, MOD);
std::vector<long long> initial = {Z, Y, X};
long long result = 0;
for (int i = 0; i < 3; ++i) {
result = (result + T_pow[0][i] * initial[i] % MOD) % MOD;
}
outfile << result << std::endl;
}
return 0;
}