Pagini recente » Cod sursa (job #3193489) | Cod sursa (job #2821051) | Cod sursa (job #294915) | Cod sursa (job #1115909) | Cod sursa (job #228217)
Cod sursa(job #228217)
#include<stdio.h>
#define NR 666013
long long mat[3][3],rez[3][3];
void init(int a,int b,int c)
{
mat[0][0]=mat[0][2]=mat[1][0]=mat[1][1]=0;
mat[0][1]=mat[1][2]=1;
mat[2][0]=c;
mat[2][1]=b;
mat[2][2]=a;
}
void init_r()
{
for(int i=0;i<3;++i)
for(int j=0;j<3;++j)
rez[i][j]=0;
rez[0][0]=rez[1][1]=rez[2][2]=1;
}
void produs(long long a[3][3],long long b[3][3])
{
long long aux[3][3]={0};
for(int i=0;i<3;++i)
for(int j=0;j<3;++j)
for(int k=0;k<3;++k)
aux[i][j]+=a[i][k]*b[k][j]%NR;
for(int i=0;i<3;++i)
for(int j=0;j<3;++j)
a[i][j]=aux[i][j]%NR;
}
void putere(long long a[3][3],long long rez[3][3],int n)
{
if(n==0)
return;
if(n&1)
produs(rez,a);
produs(a,a);
putere(a,rez,n>>1);
}
inline int calcul(int x,int y,int z)
{
return rez[2][0] * x % NR + rez[2][1] * y % NR + rez[2][2] * z % NR;
}
int main()
{
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
int T; // numarul de teste
int a,b,c,x,y,z,n;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d%d%d%d", &x, &y, &z, &a, &b, &c, &n);
//apelarea unui subprogram
init(a,b,c);
init_r();
putere(mat,rez,n-2);
printf("%d\n",calcul(x,y,z)%NR);
}
return 0;
}