Pagini recente » Cod sursa (job #1010790) | Cod sursa (job #1648008) | Cod sursa (job #1897921) | Cod sursa (job #2057272) | Cod sursa (job #2073022)
#include <fstream>
#define PRIM 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
long long t,x,y,z,a,b,c,v[3][3],prod[3][3],n;
void inmulteste(long long mat1[3][3],long long mat2[3][3])
{
long long res[3][3];
res[0][0]=mat1[0][0]*mat2[0][0]%PRIM+mat1[0][1]*mat2[1][0]%PRIM+mat1[0][2]*mat2[2][0]%PRIM;res[0][0]%=PRIM;
res[0][1]=mat1[0][0]*mat2[0][1]%PRIM+mat1[0][1]*mat2[1][1]%PRIM+mat1[0][2]*mat2[2][1]%PRIM;res[0][1]%=PRIM;
res[0][2]=mat1[0][0]*mat2[0][2]%PRIM+mat1[0][1]*mat2[1][2]%PRIM+mat1[0][2]*mat2[2][2]%PRIM;res[0][2]%=PRIM;
res[1][0]=mat1[1][0]*mat2[0][0]%PRIM+mat1[1][1]*mat2[1][0]%PRIM+mat1[1][2]*mat2[2][0]%PRIM;res[1][0]%=PRIM;
res[1][1]=mat1[1][0]*mat2[0][1]%PRIM+mat1[1][1]*mat2[1][1]%PRIM+mat1[1][2]*mat2[2][1]%PRIM;res[1][1]%=PRIM;
res[1][2]=mat1[1][0]*mat2[0][2]%PRIM+mat1[1][1]*mat2[1][2]%PRIM+mat1[1][2]*mat2[2][2]%PRIM;res[1][2]%=PRIM;
res[2][0]=mat1[2][0]*mat2[0][0]%PRIM+mat1[2][1]*mat2[1][0]%PRIM+mat1[2][2]*mat2[2][0]%PRIM;res[2][0]%=PRIM;
res[2][1]=mat1[2][0]*mat2[0][1]%PRIM+mat1[2][1]*mat2[1][1]%PRIM+mat1[2][2]*mat2[2][1]%PRIM;res[2][1]%=PRIM;
res[2][2]=mat1[2][0]*mat2[0][2]%PRIM+mat1[2][1]*mat2[1][2]%PRIM+mat1[2][2]*mat2[2][2]%PRIM;res[2][2]%=PRIM;
for(int i=0;i<3;++i)
for(int j=0;j<3;++j)
mat1[i][j]=res[i][j];
}
int main()
{
f>>t;
for(int i=1;i<=t;++i)
{
f>>x>>y>>z>>a>>b>>c>>n;
v[0][0]=v[0][2]=v[1][0]=v[1][1]=0;
v[0][1]=v[1][2]=1;
v[2][0]=c;v[2][1]=b;v[2][2]=a;
prod[0][0]=prod[1][1]=prod[2][2]=1;
prod[0][1]=prod[0][2]=prod[1][0]=prod[1][2]=prod[2][0]=prod[2][1]=0;
n-=2;
for(long long i=1;i<=n;i<<=1)
{
if(i&n) inmulteste(prod,v);
inmulteste(v,v);
}
g<<(prod[2][0]*x%PRIM+prod[2][1]*y%PRIM+prod[2][2]*z%PRIM)%PRIM<<'\n';
}
return 0;
}