Pagini recente » Cod sursa (job #238036) | Cod sursa (job #1924100) | Cod sursa (job #317917) | Cod sursa (job #1803387) | Cod sursa (job #2407085)
#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);
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;
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;
PutMat(A, n-2);
out << (x*A[0][2]%MOD+y*A[1][2]%MOD+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]=(aux[0][0]+A[0][i]*B[i][0]%MOD)%MOD;
for(int i=0; i<3; i++) aux[0][1]=(aux[0][1]+A[0][i]*B[i][1]%MOD)%MOD;
for(int i=0; i<3; i++) aux[0][2]=(aux[0][2]+A[0][i]*B[i][2]%MOD)%MOD;
for(int i=0; i<3; i++) aux[1][0]=(aux[1][0]+A[1][i]*B[i][0]%MOD)%MOD;
for(int i=0; i<3; i++) aux[1][1]=(aux[1][1]+A[1][i]*B[i][1]%MOD)%MOD;
for(int i=0; i<3; i++) aux[1][2]=(aux[1][2]+A[1][i]*B[i][2]%MOD)%MOD;
for(int i=0; i<3; i++) aux[2][0]=(aux[2][0]+A[2][i]*B[i][0]%MOD)%MOD;
for(int i=0; i<3; i++) aux[2][1]=(aux[2][1]+A[2][i]*B[i][1]%MOD)%MOD;
for(int i=0; i<3; i++) aux[2][2]=(aux[2][2]+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);
}
}