Pagini recente » Cod sursa (job #2942888) | Cod sursa (job #2705778) | Cod sursa (job #372067) | Cod sursa (job #570641) | Cod sursa (job #3158190)
#include <fstream>
#include <array>
std::ifstream fin("iepuri.in");
std::ofstream fout("iepuri.out");
const int kMod = 666013;
struct Matrix {
std::array<std::array<long long, 3>, 3> m = {0};
Matrix operator * (const Matrix & oth) const {
Matrix res;
for (int i = 0; i < 3; i += 1)
for (int j = 0; j < 3; j += 1)
res.m[i][j] = 0;
for (int i = 0; i < 3; i += 1)
for (int j = 0; j < 3; j += 1)
for (int k = 0; k < 3; k += 1)
res.m[i][j] += (m[i][k] * oth.m[k][j]) % kMod, res.m[i][j] %= kMod;
return res;
}
};
void solve () {
Matrix power, Final;
Final.m[0][0] = 1, Final.m[0][1] = 0, Final.m[0][2] = 0;
Final.m[1][0] = 0, Final.m[1][1] = 1, Final.m[1][2] = 0;
Final.m[2][0] = 0, Final.m[2][1] = 0, Final.m[2][2] = 1;
power.m[0][0] = 0, power.m[0][1] = 1, power.m[0][2] = 0;
power.m[1][0] = 0, power.m[1][1] = 0, power.m[1][2] = 1;
int zero, one, two; fin >> zero >> one >> two;
fin >> power.m[2][2] >> power.m[2][1] >> power.m[2][0];
int n; fin >> n; n -= 2;
while (n > 0) {
if (n & 1)
Final = Final * power;
power = power * power;
n >>= 1;
}
fout << (Final.m[2][0] * zero % kMod + Final.m[2][1] * one % kMod
+ Final.m[2][2] * two % kMod) % kMod << '\n';
}
int main () {
int testCases; fin >> testCases;
while (testCases > 0)
solve (), testCases -= 1;
fin.close (), fout.close ();
return 0;
}