Pagini recente » Cod sursa (job #1789812) | Cod sursa (job #172185) | Cod sursa (job #1318333) | Cod sursa (job #582421) | Cod sursa (job #2058579)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
/*void exp_log (long long M[3][3], int p)
{
if(p == 0)
{
M[0][0]=1;
M[0][1]=0;
M[0][2]=0;
M[1][0]=0;
M[1][1]=1;
M[1][2]=0;
M[2][0]=0;
M[2][1]=0;
M[2][2]=1;
}
if(p == 1)
{
///nu cred ca e nevoie
}
if (p%2 == 0)
{
inm_matr(M, MM);
exp_log(MM, p/2);
}
if (p%2 == 1)
{
inm_matr(M, MM);
exp_log(MM, (p-1)/2);
inm_matr(M, MM);
///return inm_matr(A, exp_log(B, (p-1)/2));
}
///return (n*exp_log((n*n), (p-1)/2));
}*/
long long M[3][3];
void inm_matr(long long M[3][3])
{
long long MP[3][3]={0,0};
int i, j, k;
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
for(k = 0; k < 3; k++)
MP[i][j] += (M[i][k] * M[k][j] % 666013);
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
M[i][j] = MP[i][j];
}
void exp_log(long long M[3][3], int p)
{
/*if(p == 1)
if(p == 0)
{
M[0][0]=1;
M[0][1]=0;
M[0][2]=0;
M[1][0]=0;
M[1][1]=1;
M[1][2]=0;
M[2][0]=0;
M[2][1]=0;
M[2][2]=1;
}*/
if (p%2 == 0 && p>0)
{
inm_matr(M);
exp_log(M, p/2);
}
if (p%2 == 1 && p>1)
{
int i, j, k;
int M_vechi[3][3];
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
M_vechi[i][j] = M[i][j];
inm_matr(M);
exp_log(M, (p-1)/2);
long long MP[3][3]={0,0};
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
for(k = 0; k < 3; k++)
MP[i][j] += (M[i][k] * M_vechi[k][j] % 666013);
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
M[i][j] = MP[i][j];
}
}
int main()
{
int T, X, Y, Z, A, B, C;
long long N;
fin>>T;
int i, j, k;
for(k=1; k<=T; k++)
{
fin>>X>>Y>>Z>>A>>B>>C>>N;
M[0][0]=0;
M[0][1]=1;
M[0][2]=0;
M[1][0]=0;
M[1][1]=0;
M[1][2]=1;
M[2][0]=C;
M[2][1]=B;
M[2][2]=A;
exp_log(M, N);
/*for(i=0; i<=2; i++)
{
for(j=0; j<=2; j++)
cout<<M[i][j]<<" ";
cout<<endl;
}*/
long long r;
r = M[0][0]*X + M[0][1]*Y + M[0][2]*Z;
fout<<r<<endl;
}
}