Pagini recente » Cod sursa (job #2029701) | Cod sursa (job #1221529) | Cod sursa (job #401683) | Cod sursa (job #1468920) | Cod sursa (job #2905140)
#include <bits/stdc++.h>
using namespace std;
const int MOD = 666013;
long long B[3][3], I[3][3];
void inmultire(long long M1[3][3], long long M2[3][3])
{
// se inmultesc 2 matrice
long long rez[3][3];
for (int i = 0; i <= 2; i++)
for (int j = 0; j <= 2; j++)
{
rez[i][j] = 0;
for (int l = 0; l <= 2; l++)
rez[i][j] += (M1[i][l] * M2[l][j]) % MOD;
}
// se copiaza produsul in prima matrice
for (int i = 0; i <= 2; i++)
for (int j = 0; j <= 2; j++)
M1[i][j] = rez[i][j];
}
void ridicare(int exp)
{
while (exp != 0)
{
if (exp % 2 == 0)
{
exp = exp / 2;
inmultire(B, B);
// se ridica baza la a doua
}
else
{
exp--;
inmultire(I, B);
}
}
}
int main()
{
ifstream fin ("iepuri.in");
ofstream fout ("iepuri.out");
int x, y, z, a, b, c, t, n;
int i, j, l;
fin >> t;
for (i = 1; i <= t; i++)
{
fin >> x >> y >> z >> a >> b >> c >> n;
B[0][1] = 1;
B[1][2] = 1;
B[2][0] = c; B[2][1] = b; B[2][2] = a;
I[0][0] = 1; I[1][1] = 1; I[2][2] = 1;
ridicare (n-2);
fout << ( (I[2][0] * x) + (I[2][1] * y) + (I[2][2] * z) ) % MOD << "\n";
for (j = 0; j <= 2; j++)
{
for (l = 0; l <= 2; l++)
{
B[j][l] = 0;
I[j][l] = 0;
}
}
}
fin.close();
fout.close();
return 0;
}