Pagini recente » Cod sursa (job #1482823) | Cod sursa (job #1194770)
/*
Keep It Simple!
*/
#include<fstream>
using namespace std;
#define MOD 666013
long long T, A[4], B[4], N,M[4][4];
void Multiply(long long X[4][4], long long Y[4][4])
{
long long aux[4][4];
memset(aux, 0, sizeof(aux));
for (int i = 1; i <= 3; i++)
for (int j = 1; j <= 3; j++)
for (int k = 1; k <= 3; k++)
{
aux[i][j] = (aux[i][j] + X[i][k] * Y[k][j])%MOD;
}
memcpy(X, aux, sizeof(aux));
}
void LogPow(int P)
{
long long sol[4][4];
memset(sol, 0, sizeof(sol));
sol[1][1] = sol[2][2] = sol[3][3] = 1;
while (P)
{
if (P % 2)
Multiply(sol, M);
Multiply(M, M);
P /= 2;
}
memcpy(M, sol, sizeof(sol));
}
int main()
{
ifstream f("iepuri.in");
ofstream g("iepuri.out");
f >> T;
while (T--)
{
for (int i = 1; i <= 3; i++) f >> A[i];
for (int i = 1; i <= 3; i++) f >> B[i];
f >> N;
memset(M, 0, sizeof(M));
M[1][2] = M[2][3] = 1;
for (int i = 1; i <= 3; i++) M[3][i] = B[3 - i + 1];
LogPow(N);
A[1] = ((M[1][1] * A[1])%MOD + (M[1][2] * A[2])%MOD + (M[1][3] * A[3])%MOD)%MOD;
g << A[1] << '\n';
}
f.close();
g.close();
return 0;
}