Pagini recente » Cod sursa (job #105061) | Cod sursa (job #267480) | Cod sursa (job #1297931) | Cod sursa (job #105056) | Cod sursa (job #1138846)
#include <iostream>
#include <fstream>
using namespace std;
#define mod 666013
struct matrix
{
// e o matrice 3 X 3
int x[4][4];
} mi,mf;
int t,it,x,y,z,a,b,c,n,r;
void add(int &nr,int nr1)
{
nr+=nr1;
while (nr>mod)
nr-=mod;
while (nr<0)
nr+=mod;
}
int times(int nr1,int nr2)
{
int nr=1LL*nr1*nr2%mod;
return nr;
}
matrix operator * (matrix m1,matrix m2)
{
matrix r;
int l,c,i;
for (l=0;l<=3;l++)
for (c=0;c<=3;c++)
r.x[l][c]=0;
for (l=1;l<=3;l++)
for (c=1;c<=3;c++)
for (i=1;i<=3;i++)
add(r.x[l][c],times(m1.x[l][i],m2.x[i][c]));
return r;
}
matrix powmatrix3(matrix m,int n)
{
if (n==1)
return m;
matrix axm,rm;
int l,c;
if (n%2==1)
rm=m;
else
{
for (l=0;l<=3;l++)
for (c=0;c<=3;c++)
if (l==c)
rm.x[l][c]=1;
else
rm.x[l][c]=0;
}
axm=powmatrix3(m,n/2);
rm=rm*axm;
rm=rm*axm;
return rm;
}
int main(void)
{
FILE * f;
f=fopen("iepuri.in","r");
ofstream g("iepuri.out");
fscanf(f,"%d",&t);
for (it=1;it<=t;it++)
{
fscanf(f,"%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
mi.x[0][0]=mi.x[0][1]=mi.x[0][2]=mi.x[0][3]=mi.x[1][0]=mi.x[2][0]=mi.x[3][0]=0;
mi.x[1][1]=a;
mi.x[1][2]=b;
mi.x[1][3]=c;
mi.x[2][1]=mi.x[3][2]=1;
mi.x[2][2]=mi.x[2][3]=mi.x[3][1]=mi.x[3][3]=0;
mf=powmatrix3(mi,n-2);
r=1LL*mf.x[1][1]*z%mod;
while (r>mod)
r-=mod;
r+=1LL*mf.x[1][2]*y%mod;
while (r>mod)
r-=mod;
r+=1LL*mf.x[1][3]*x%mod;
while (r>mod)
r-=mod;
g<<r<<'\n';
}
g.close();
return 0;
}