Pagini recente » Cod sursa (job #2396459) | Cod sursa (job #1007386) | Cod sursa (job #1305491) | Cod sursa (job #166313) | Cod sursa (job #1820747)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
const int P = 666013;
short T, X, Y, Z, A, B, C;
int N;
void prod(int A[3][3], int B[3][3])
{
int C[3][3] = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } };
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
{
for(int k = 0; k < 3; k++)
C[i][j] += A[i][k] * B[k][j];
}
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
A[i][j] = C[i][j] % P;
}
int putere(int n)
{
int PUT[3][3] = { { 0, 0 }, { 1, 0 }, { 0, 1 } };
int M[3][3] = { { 0, 0 }, { 1, 0 }, { 0, 1 } };
M[0][2] = PUT[0][2] = C;
M[1][2] = PUT[1][2] = B;
M[2][2] = PUT[2][2] = A;
n--;
while(n)
{
if(n % 2 == 0)
{
prod(PUT, PUT);
n /= 2;
}
else
{
prod(PUT, M);
n--;
}
}
return (X * PUT[0][2] + Y * PUT[1][2] + Z * PUT[2][2]) % P;
}
int main()
{
f >> T;
while(T--)
{
f >> X >> Y >> Z >> A >> B >> C >> N;
g << putere(N - 2) << "\n";
}
f.close();
g.close();
return 0;
}