Pagini recente » Cod sursa (job #1650101) | Cod sursa (job #2976674) | Cod sursa (job #1301819) | Cod sursa (job #1428982) | Cod sursa (job #2917742)
#include <fstream>
#define MOD 666013
#define N 10
using namespace std;
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
long long mat[N][N];
long long matc[N][N];
long long mati[N][N];
void inmultire(long long mat[][N],long long matt[][N],long long matf[][N],long long n,long long m,long long p)
{
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
matf[i][j]=0;
for(long long i=1; i<=n; i++)
{
for(long long j=1; j<=m; j++)
{
for(long long l=1; l<=p; l++)
{
matf[i][j]+=mat[i][l]*matt[l][j];
matf[i][j]%=MOD;
}
}
}
}
void atribuire(long long mat1[][N],long long mat2[][N],long long n,long long m)
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
mat1[i][j]=mat2[i][j];
}
}
}
void modulo()
{
for(int i=1; i<=3; i++)
{
for(int j=1; j<=3; j++)
mat[i][j]%=MOD;
}
}
int main()
{
int t;
cin>>t;
while(t>0)
{
long long n,X,Y,Z,A,B,C;
cin>>X>>Y>>Z>>A>>B>>C>>n;
mati[1][1]=A*(A*Z+B*Y+C*X)+B*Z+C*Y;
mati[1][2]=A*Z+B*Y+C*X;
mati[1][3]=Z;
mati[2][1]=A*Z+B*Y+C*X;
mati[2][2]=Z;
mati[2][3]=Y;
mati[3][1]=Z;
mati[3][2]=Y;
mati[3][3]=X;
modulo();
///
mat[1][1]=A;
mat[1][2]=1;
mat[1][3]=0;
mat[2][1]=B;
mat[2][2]=0;
mat[2][3]=1;
mat[3][1]=C;
mat[3][2]=0;
mat[3][3]=0;
n-=3;
while(n>0)
{
if(n%2==1)
{
inmultire(mati,mat,matc,3,3,3);
atribuire(mati,matc,3,3);
n--;
}
else
{
inmultire(mat,mat,matc,3,3,3);
atribuire(mat,matc,3,3);
n/=2;
}
}
cout<<mati[2][1]%MOD<<'\n';
t--;
}
return 0;
}