Pagini recente » Cod sursa (job #1164576) | Cod sursa (job #198481)
Cod sursa(job #198481)
#include <stdio.h>
#include <stdlib.h>
typedef long long mat[5][5];
mat A,REZ;
int X,Y,Z,N,T;
inline void putere(mat& m1 , mat& m2 , mat& m3)
{
mat AUX;
for (int i = 1; i<= 3 ; ++i)
for (int j = 1; j<=3; ++j)
AUX[i][j]=0;
for (int i =1; i<=3; ++i)
for (int j=1; j<=3 ; ++j)
for (int k=1; k<=3; ++k)
AUX[i][j]+=((long long)m1[i][k]*m2[k][j]) % 666013;
for (int i = 1; i<= 3 ; ++i)
for ( int j=1 ; j<=3 ; ++j)
m3[i][j]=AUX[i][j] % 666013;
}
int main()
{
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
scanf("%d ", &T);
for (; T ;--T)
{
scanf("%d %d %d %d %d %d %d", &X,&Y,&Z,&A[3][3],&A[3][2],&A[3][1],&N);
// N -= 2;
A[1][2]=1;A[2][3]=1;
REZ[1][1]=REZ[2][2]=REZ[3][3]=1;
for ( long long p=1; p<= N ; p<<=1)
{
/* for (int i = 1; i<= 3 ; ++i,printf("\n"))
for (int j = 1; j<=3; ++j)
printf("%d ",A[i][j]);*/
if (p & N) putere(A,REZ,REZ);
putere(A,A,A);
}
printf("%lld\n",((long long)REZ[1][1]*X +(long long)REZ[1][2]*Y + (long long)REZ[1][3]*Z) % 666013);
for (int i = 1; i<= 3 ; ++i)
for (int j = 1; j<=3; ++j)
{
A[i][j]=0;REZ[i][j]=0;
}
}
return 0;
}