Pagini recente » Cod sursa (job #756386) | Cod sursa (job #3030168) | Cod sursa (job #1123898) | Cod sursa (job #2361312) | Cod sursa (job #2949656)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("iepuri.in");
ofstream fout ("iepuri.out");
typedef long long ll;
ll const MOD = 666013;
struct matrix {
vector<vector<int>> mat;
matrix(int n) {
mat.resize(3);
for (int i = 0; i < 3; i++)
mat[i].resize(3);
}
matrix operator * (matrix other) {
matrix ans(1);
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
for (int k = 0; k < 3; k++)
ans.mat[i][j] = (ans.mat[i][j] + (1LL * mat[i][k] * other.mat[k][j]) % MOD) % MOD;
return ans;
}
};
matrix logPow(matrix a, int b) {
matrix ans(1);
for (int i = 0; i < 3; i++)
ans.mat[i][i] = 1;
while (b) {
if (b & 1)
ans = ans * a;
a = a * a;
b >>= 1;
}
return ans;
}
int main() {
int t;
fin >> t;
while (t--) {
int x, y, z, a, b, c, n;
fin >> x >> y >> z >> a >> b >> c >> n;
matrix init(1);
init.mat[0][0] = x;
init.mat[1][0] = y;
init.mat[2][0] = z;
matrix mult(1);
mult.mat[0][1] = 1;
mult.mat[1][2] = 1;
mult.mat[2][0] = c;
mult.mat[2][1] = b;
mult.mat[2][2] = a;
mult = logPow(mult, n - 2);
matrix answer(1);
answer = mult * init;
fout << answer.mat[2][0] << "\n";
}
return 0;
}