Pagini recente » Rating Nadolu Bogdan (NadoluBogdan) | Cod sursa (job #2080846) | Cod sursa (job #2053516) | Cod sursa (job #187894) | Cod sursa (job #2632721)
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
const int MOD = 666013;
int x,y,z,a,b,c,n,T;
long long A[4][4],B[4][4],C[4][4],D[4][4],I[4][4];
void Init(long long B[4][4])
{
B[1][1]=a;B[2][1]=b;B[3][1]=c;
for(int i=1;i<=2;i++)
B[i][i+1]=1;
}
void MultMat(long long A[4][4], long long B[4][4])
{
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
{
C[i][j]=A[i][j];
D[i][j]=B[i][j];
A[i][j]=0;
}
for(int l=1;l<=3;l++)
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
A[l][i]=((1LL*A[l][i])%MOD+(1LL*C[l][j]*D[j][i])%MOD)%MOD;
}
void Reset(long long A[4][4])
{
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
A[i][j]=0;
}
for(int i=1;i<=3;i++)
A[i][i]=1;
}
void Pow(long long A[4][4], int k)
{
if(!k)
return;
else
{
if(k%2==0)
{
Pow(A,k/2);
MultMat(A,A);
}
else
{
Pow(A,k-1);
MultMat(A,B);
}
}
}
void GetAns()
{
long long X=0;
X=((1LL*z*A[1][1])%MOD+(1LL*y*A[2][1])%MOD+(1LL*x*A[3][1])%MOD)%MOD;
fout<<X<<'\n';
}
int main()
{
fin>>T;
while(T--)
{
Reset(A);
fin>>x>>y>>z>>a>>b>>c>>n;
Init(B);
Pow(A,n-2);
GetAns();
}
}