Pagini recente » Cod sursa (job #3173433) | Cod sursa (job #2145169) | Cod sursa (job #2789372) | Cod sursa (job #2663385) | Cod sursa (job #1139059)
#include <fstream>
#include <iostream>
#include <string.h>
using namespace std;
typedef long long ll;
const int MOD = 666013;
ll a[3][3], b[3][3];
void mmult(ll A[3][3], ll B[3][3], ll res[3][3])
{
ll tmp[3][3];
memset(tmp, 0, sizeof(tmp));
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
for (int k = 0; k < 3; k++)
tmp[i][j] += A[i][k] * B[k][j];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
res[i][j] = tmp[i][j] % MOD;
}
int main()
{
int T,X,Y,Z,A,B,C,N;
int *tmp_ptr;
ifstream f ("iepuri.in");
ofstream g ("iepuri.out");
f >> T;
for (int t = 0; t < T; t++) {
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
f >> X >> Y >> Z >> A >> B >> C >> N;
a[0][0] = A; a[0][1] = B; a[0][2] = C;
a[1][0] = 1;
a[2][1] = 1;
b[0][0] = 1; b[1][1] = 1; b[2][2] = 1;
N = N-2;
while (N) {
if (N%2 == 1) {
mmult(b,a,b);
}
mmult(a,a,a);
N /= 2;
}
ll ret = (b[0][0] * Z + b[0][1] * Y + b[0][2] * X) % MOD;
g << ret << '\n';
}
return 0;
}