Pagini recente » Cod sursa (job #109215) | Cod sursa (job #2077800) | Cod sursa (job #1216746) | Cod sursa (job #1313960) | Cod sursa (job #2407092)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
const int MOD=666013;
int A[3][3], CA[3][3];
void ProdMat(int A[3][3], int B[3][3], int R[3][3]);
void PutMat(int A[3][3], int n);
void Init(int a, int b, int c);
int main()
{
int t;
in >> t;
for(int i=1; i<=t; i++)
{
int x, y, z, a, b, c, n;
in >> x >> y >> z >> a >> b >> c >> n;
Init(a, b, c);
PutMat(A, 150);
out << ((long long)x*A[0][2]%MOD+(long long)y*A[1][2]%MOD+(long long)z*A[2][2]%MOD)%MOD << '\n';
}
return 0;
}
void ProdMat(int A[3][3], int B[3][3], int R[3][3])
{
int aux[3][3]={0};
for(int i=0; i<3; i++) aux[0][0]=(long long)(aux[0][0]+(long long)A[0][i]*B[i][0]%MOD)%MOD;
for(int i=0; i<3; i++) aux[0][1]=(long long)(aux[0][1]+(long long)A[0][i]*B[i][1]%MOD)%MOD;
for(int i=0; i<3; i++) aux[0][2]=(long long)(aux[0][2]+(long long)A[0][i]*B[i][2]%MOD)%MOD;
for(int i=0; i<3; i++) aux[1][0]=(long long)(aux[1][0]+(long long)A[1][i]*B[i][0]%MOD)%MOD;
for(int i=0; i<3; i++) aux[1][1]=(long long)(aux[1][1]+(long long)A[1][i]*B[i][1]%MOD)%MOD;
for(int i=0; i<3; i++) aux[1][2]=(long long)(aux[1][2]+(long long)A[1][i]*B[i][2]%MOD)%MOD;
for(int i=0; i<3; i++) aux[2][0]=(long long)(aux[2][0]+(long long)A[2][i]*B[i][0]%MOD)%MOD;
for(int i=0; i<3; i++) aux[2][1]=(long long)(aux[2][1]+(long long)A[2][i]*B[i][1]%MOD)%MOD;
for(int i=0; i<3; i++) aux[2][2]=(long long)(aux[2][2]+(long long)A[2][i]*B[i][2]%MOD)%MOD;
for(int i=0; i<3; i++)
for(int j=0; j<3; j++) R[i][j]=aux[i][j];
}
void PutMat(int A[3][3], int n)
{
if(n==1) return;
if(n%2==1)
{
PutMat(A, n/2);
ProdMat(A, A, A);
ProdMat(CA, A, A);
}
else
{
PutMat(A, n/2);
ProdMat(A, A, A);
}
}
void Init(int a, int b, int c)
{
for(int i=0; i<3; i++)
for(int j=0; j<3; j++) CA[i][j]=A[i][j]=0;
CA[1][0]=A[1][0]=1;
CA[2][1]=A[2][1]=1;
A[0][2]=CA[0][2]=c;
A[1][2]=CA[1][2]=b;
A[2][2]=CA[2][2]=a;
}