Pagini recente » Borderou de evaluare (job #851570) | Borderou de evaluare (job #1619716) | Borderou de evaluare (job #2641333) | Borderou de evaluare (job #192813) | Cod sursa (job #394194)
Cod sursa(job #394194)
#include<stdio.h>
using namespace std;
const long m=666013;
long long v[3][3],h[3][3],o[3][3],n;
long t,x,y,z,a,b,c;
void inmultire()
{
long i,j,k;
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
for(k=0;k<=2;k++)
h[i][j]=(h[i][j]%m+(v[i][k]*v[k][j])%m)%m;
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
{ v[i][j]=h[i][j];
h[i][j]=0;
}
}
void putere(long n)
{ if(n==1) ;
else if(n%2==0)
{ inmultire();
putere(n/2);
}
else
{ inmultire();
putere(n/2);
int i,j,k;
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
for(k=0;k<=2;k++)
h[i][j]=(h[i][j]%m+(v[i][k]*o[k][j])%m)%m;
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
{ v[i][j]=h[i][j];
h[i][j]=0;
}
}
}
int main()
{
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
scanf("%ld",&t);
for(long g=1;g<=t;g++)
{
scanf("%ld%ld%ld%ld%ld%ld%lld",&x,&y,&z,&a,&b,&c,&n);
long i,j;
o[2][0]=v[2][0]=c;
o[2][1]=v[2][1]=b;
o[2][2]=v[2][2]=a;
o[0][1]=v[0][1]=1;
o[1][2]=v[1][2]=1;
putere(n);
long long q=(v[0][0]*x)%m+(v[0][1]*y)%m+(v[0][2]*z)%m;
q=q%m;
printf("%lld\n",q%m);
q=0;
for(i=0;i<=2;i++)
{ for(j=0;j<=2;j++)
{ //printf("%ld ",v[i][j]);
v[i][j]=0;
o[i][j]=0;
h[i][j]=0;
}
//printf("\n");
}
}
fclose(stdin);
fclose(stdout);
return 0;
}