Pagini recente » Cod sursa (job #1455639) | Cod sursa (job #2117425) | Cod sursa (job #805548) | Cod sursa (job #2887294) | Cod sursa (job #2432297)
#include <iostream>
#include <algorithm>
#include <cmath>
#include <fstream>
#define ll long long
#define MOD 666013
using namespace std;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
ll a, b, c, x, y, z, t, n;
ll m[3], Z[3][3];
void inmultire(ll a[3][3], ll b[3][3]) {
ll c[3][3];
for (int j = 0; j < 3; j++) {
for (int i = 0; i < 3; i++) {
c[i][j] = (1LL * a[0][j] * b[i][0] + 1LL * a[1][j] * b[i][1] + 1LL * a[2][j] * b[i][2]) % MOD;
}
}
for (int j = 0; j < 3; j++) {
for (int i = 0; i < 3; i++) {
a[i][j] = c[i][j];
}
}
}
void exponentiere(ll N[3][3], ll p) {
ll r[3][3] = { {1, 0, 0}, {0, 1, 0}, {0, 0, 1} };
while (p) {
if (p % 2 == 1)inmultire(r, N);
inmultire(N, N);
p /= 2;
}
for (int j = 0; j < 3; j++) {
for (int i = 0; i < 3; i++) {
N[i][j] = r[i][j];
}
}
}
void inmultire_final(ll a[3], ll b[3][3]) {
ll c[3];
c[0] = (1LL * a[0] * b[0][0] + 1LL * a[1] * b[0][1] + 1LL * a[2] * b[0][2]) & MOD;
c[1] = (1LL * a[0] * b[1][0] + 1LL * a[1] * b[1][1] + 1LL * a[2] * b[1][2]) % MOD;
c[2] = (1LL * a[0] * b[2][0] + 1LL * a[1] * b[2][1] + 1LL * a[2] * b[2][2]) % MOD;
for (int j = 0; j < 3; j++) {
a[j] = c[j];
}
}
int main() {
in >> t;
for (int i = 0; i < t; i++) {
in >> a >> b >> c >> x >> y >> z >> n;
m[0] = x, m[1] = y, m[2] = z;
Z[0][0] = 0, Z[1][0] = 0, Z[2][0] = c;
Z[0][1] = 1, Z[1][1] = 0, Z[2][1] = b;
Z[0][2] = 0, Z[1][2] = 1, Z[2][2] = a;
if (n == 0)out << m[0];
if (n == 1)out << m[1];
if (n == 2)out << m[2];
if (n > 2) {
exponentiere(Z, n - 2);
inmultire_final(m, Z);
out << m[2] % MOD << '\n';
}
}
}