Pagini recente » Cod sursa (job #35959) | Cod sursa (job #635799) | Cod sursa (job #1985466) | Cod sursa (job #1845189) | Cod sursa (job #2106567)
#include <fstream>
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
const int MOD = 666013;
long long n,t;
int x,y,z,a,b,c;
struct matr{
long long el[4][4];
};
matr iMat;
matr inmultireMat(matr a, matr b){
matr c;
for(int i =1; i<= 3; i++)
{
for(int j =1; j<= 3; j++)
{
c.el[i][j] = 0;
for(int l =1; l<= 3; l++)
{
c.el[i][j] += ((a.el[i][l]*b.el[l][j])%MOD);
}
}
}
return c;
}
matr produsMat(long long k)
{
if(k == 1)
return iMat;
if(k%2==0)
{
matr m = produsMat(k/2);
return inmultireMat(m,m);
}
else
{
matr m = produsMat((k-1)/2);
m = inmultireMat(m,m);
return inmultireMat(m,iMat);
}
}
void afisareMat(matr a)
{
for(int i =1; i<= 3; i++)
{
for(int j =1; j<= 3; j++)
{
g<<a.el[i][j]<<" ";
}
g<<"\n";
}
g<<"\n";
}
void rezolva(){
f>>x>>y>>z;
f>>a>>b>>c;
f>>n;
n-=2;
iMat.el[1][1] = a;
iMat.el[2][1] = b;
iMat.el[3][1] = c;
iMat.el[1][2] = 1;
iMat.el[2][2] = 0;
iMat.el[3][2] = 0;
iMat.el[1][3] = 0;
iMat.el[2][3] = 1;
iMat.el[3][3] = 0;
matr m = produsMat(n);
//afisareMat(m);
g<<(z*m.el[1][1] +y*m.el[2][1] +x*m.el[3][1]) % MOD<<"\n";
}
int main(){
f>>t;
while(t>0)
{
rezolva();
t--;
}
f.close();
g.close();
return 0;
}