Pagini recente » Cod sursa (job #498845) | Cod sursa (job #1971687) | Cod sursa (job #1605094) | Cod sursa (job #2677459) | Cod sursa (job #2735150)
#include <fstream>
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
#define MOD 666013
void inmultire(int mat1[3][3], int mat2[3][3], int mat3[3][3], int ind1, int ind2, int ind3) {
for (int i = 0; i < ind1; ++i)
for (int j = 0; j < ind2; ++j) {
mat3[i][j] = 0;
for (int k = 0; k < ind2; ++k)
mat3[i][j] = ((long long) mat1[i][k] * mat2[k][j] + mat3[i][j]) % MOD;
}
}
void copiere(int mat1[3][3], int mat2[3][3], int lin, int col) {
for (int i = 0; i < lin; ++i)
for (int j = 0; j < col; ++j)
mat1[i][j] = mat2[i][j];
}
void power(int mat1[3][3], int p, int mat2[3][3]) {
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
mat2[i][j] = 0;
for (int i = 0; i < 3; ++i)
mat2[i][i] = 1;
int aux[3][3];
for (; p; p >>= 1) {
if (p & 1) {
inmultire(mat1, mat2, aux, 3, 3, 3);
copiere(mat2, aux, 3, 3);
}
inmultire(mat1, mat1, aux, 3, 3, 3);
copiere(mat1, aux, 3, 3);
}
}
int main() {
int t, x, y, z, a, b, c, n;
int putere[3][3], mat[3][3];
f >> t;
for (int i = 0; i < t; ++i) {
f >> x >> y >> z >> a >> b >> c >> n;
mat[0][0] = mat[0][2] = mat[1][0] = mat[1][1] = 0;
mat[0][1] = mat[1][2] = 1;
mat[2][0] = c;
mat[2][1] = b;
mat[2][2] = a;
power(mat, n, putere);
g << (((long long) putere[0][0] * x) % MOD + ((long long) putere[0][1] * y) % MOD +
((long long) putere[0][2] * z) % MOD) % MOD << '\n';
}
return 0;
}