Pagini recente » Cod sursa (job #3163300) | Cod sursa (job #1830023) | Cod sursa (job #2945786) | Cod sursa (job #663712) | Cod sursa (job #377085)
Cod sursa(job #377085)
#include<cstdio>
#define N 4
#define MOD 666013
int a[N],copie[32][N][N],m[N][N],p,rez[N][N];
void copiez(int x)
{
for (int i=1; i<=3; ++i)
for (int j=1; j<=3; ++j)
copie[x][i][j]=m[i][j];
}
void m2()
{
for (int i=1; i<=3; ++i)
for (int j=1; j<=3; ++j)
{
rez[i][j]=0;
for (int k=1; k<=3; ++k)
rez[i][j]=(rez[i][j]+(m[i][k]*m[k][j])%MOD)%MOD;
}
for (int i=1; i<=3; ++i)
for (int j=1; j<=3; ++j)
m[i][j]=rez[i][j];
}
void copieXm(int x)
{
for (int i=1; i<=3; ++i)
for (int j=1; j<=3; ++j)
{
rez[i][j]=0;
for (int k=1; k<=3; ++k)
rez[i][j]=(rez[i][j]+(copie[x][i][k]*m[k][j])%MOD)%MOD;
}
for (int i=1; i<=3; ++i)
for (int j=1; j<=3; ++j)
m[i][j]=rez[i][j];
}
void putere(int p,int num)
{
if (!p)
{
for (int i=1; i<=3;++i)
for(int j=1; j<=3; ++j)
if (i==j)
m[i][j]=1;
else
m[i][j]=0;
return;
}
if (p&1)
{
copiez(num);
m2();
putere(p>>1,num+1);
copieXm(num);
}
else
{
m2();
putere(p>>1,num);
}
}
void mXa()
{
for (int i=1; i<=3; ++i)
{
rez[i][1]=0;
for (int k=1; k<=3; ++k)
rez[i][1]=(rez[i][1]+(m[i][k]*a[k])%MOD)%MOD;
}
}
void citire()
{
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
short int t;
scanf("%hd",&t);
while (t--)
{
scanf("%d%d%d%d%d%d%d",&a[1],&a[2],&a[3],&m[3][3],&m[3][2],&m[3][1],&p);
m[2][1]=0;m[2][2]=0;m[2][3]=1;
m[1][1]=0;m[1][2]=1;m[1][3]=0;
putere(p,0);
mXa();
printf("%d\n",rez[1][1]);
}
}
int main()
{
citire();
return 0;
}