Pagini recente » Rating Octav M. (octrar) | Cod sursa (job #1250488) | Cod sursa (job #482174) | template/preoni-2007 | Cod sursa (job #1851168)
#include <fstream>
#include <cstring>
using namespace std;
int N, X, Y, Z, A, B, C;
int temp[3][3], sol[3][3], aux[3][3];
void initializare()
{
sol[0][0] = X; sol[0][1] = Y; sol[0][2] = Z;
temp[0][0] = 0; temp[0][1] = 0; temp[0][2] = C;
temp[1][0] = 1; temp[1][1] = 0; temp[1][2] = B;
temp[2][0] = 0; temp[2][1] = 1; temp[2][2] = A;
}
void produs(int a[3][3], int b[3][3], int c[3][3])
{
int i,j,k;
for(i=0; i<3; i++)
for(j=0; j<3; j++)
c[i][j] = 0;
for (i = 0; i < 3; ++i)
for (j = 0; j < 3; ++j)
for (k = 0; k < 3; ++k)
c[i][j] = (c[i][j] + (long long)1 * a[i][k] * b[k][j]) % 666013;
for(i=0; i<3; i++)
for(j=0; j<3; j++)
a[i][j] = c[i][j];
}
void exponentiere(int N)
{
while (N > 0)
{
if (N % 2 == 1)
produs(sol, temp, aux);
N = N/2;
produs(temp, temp, aux);
}
}
int main()
{
int T, i;
i=0;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
fin >> T;
while(i<T)
{
fin >> X >> Y >> Z >> A >> B >> C >> N;
initializare();
exponentiere(N - 2);
fout << sol[0][2] << endl;
i++;
}
return 0;
}