Pagini recente » Cod sursa (job #1416826) | Cod sursa (job #2783052) | Cod sursa (job #2198938) | Cod sursa (job #1137625) | Cod sursa (job #2517538)
#include <fstream>
#define ll long long
#define mod 666013
using namespace std;
ifstream fin ("iepuri.in");
ofstream fout ("iepuri.out");
ll m[4][4], r[4][4];
void afisareMatrice(ll a[4][4]) {
int i, j;
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++)
fout << a[i][j] << ' ';
fout << '\n';
}
fout << '\n';
}
void copiere(ll destinatie[4][4], ll sursa[4][4]) {
int i, j;
for (i = 1; i <= 3; i++)
for (j = 1; j <= 3; j++)
destinatie[i][j] = sursa[i][j];
}
void inmultireMatrici(ll a[4][4], ll b[4][4], ll c[4][4]) {
int i, j, k;
for (i = 1; i <= 3; i++)
for (j = 1; j <= 3; j++) {
c[i][j] = 0;
for (k = 1; k <= 3; k++)
c[i][j] = (c[i][j] % mod + ((a[i][k] % mod) * (b[k][j] % mod)) % mod) % mod;
}
}
void ridicareLaPutere(ll a[4][4], ll n) {
int i, j;
ll copie[4][4], aux[4][4];
copiere(copie, a);
while (n) {
if (n % 2 == 1) {
inmultireMatrici(r, copie, aux);
copiere(r, aux);
}
n /= 2;
inmultireMatrici(copie, copie, aux);
copiere(copie, aux);
}
}
int main() {
int t, x, y, z, a, b, c, n, i;
fin >> t;
for (i = 1; i <= t; i++) {
fin >> x >> y >> z >> a >> b >> c >> n;
m[3][3] = a;
m[3][2] = b;
m[3][1] = c;
m[2][3] = m[1][2] = 1;
m[2][2] = m[2][1] = m[1][3] = m[1][1] = 0;
r[1][1] = r[2][2] = r[3][3] = 1;
r[1][2] = r[1][3] = r[2][1] = r[2][3] = r[3][1] = r[3][2] = 0;
ridicareLaPutere(m, n);
fout << r[1][1] * x + r[1][2] * y + r[1][3] * z << '\n';
}
fin.close();
fout.close();
return 0;
}