Pagini recente » Cod sursa (job #685053) | Cod sursa (job #2223573) | Cod sursa (job #1595871) | Cod sursa (job #1123460) | Cod sursa (job #750947)
Cod sursa(job #750947)
#include<iostream>
#include<fstream>
using namespace std;
fstream f("iepuri.in",ios::in), g("iepuri.out",ios::out);
long long mat[5][5],mat1[5][5],pu,mod=666013;
int x,y,z,a,b,c,t;
void matmat(long long x[5][5],long long y[5][5]);
void matpro(long long x[5][5],long long nr);
void putere(long long a[5][5],long long p,long long m);
void init(long long x[5][5],int nr1,int nr2,int nr3);
int main()
{
f>>t;
for(int i=1;i<=t;i++)
{
f>>x>>y>>z>>a>>b>>c>>pu;
init(mat,a,b,c);
init(mat1,a,b,c);
putere(mat,pu,mod);
//cout<<mat[1][1]*x+mat[1][2]*y+mat[1][3]*z<<"\n";
g<<(mat[1][1]*x+mat[1][2]*y+mat[1][3]*z)%mod<<"\n";
}
return 0;
}
void matmat(long long x[5][5],long long y[5][5])
{
long long z[5][5];
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
z[i][j]=0;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
for(int k=1;k<=3;k++)
z[i][j]+=(x[i][k]*y[k][j]);
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
x[i][j]=z[i][j];
}
void matpro(long long x[5][5],long long nr)
{
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
x[i][j]%=nr;
}
void putere(long long a[5][5],long long p,long long m)
{
if(p>1)
{
putere(a,p/2,m);
matmat(a,a);
matpro(a,m);
if(p%2)
matmat(a,mat1);
matpro(a,m);
}
}
void init(long long x[5][5],int nr1,int nr2,int nr3)
{
for(int i=1;i<=2;i++)
for(int j=1;j<=3;j++)
if((i==1 && j==2) || (i==2 && j==3))
x[i][j]=1;
else
x[i][j]=0;
x[3][1]=nr3;
x[3][2]=nr2;
x[3][3]=nr1;
}