Pagini recente » Cod sursa (job #771220) | Cod sursa (job #1173117) | Cod sursa (job #1060804) | Rating bogdan andrei (kinston99) | Cod sursa (job #1562858)
#include<fstream>
#include<iostream>
using namespace std;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
long long Fin[3], Aux[3][3], Sol[3][3];
int t, x, y, z, a, b, c, n;
const int MOD = 666013;
void citire ()
{
in>>x>>y>>z>>a>>b>>c>>n;
}
void InmultireDoua(long long M[3][3], long long N[3][3])
{
int i, j, k;
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
Aux[i][j] = 0;
}
}
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
for(k=0; k<3; k++)
Aux[i][j] += M[i][k] * N[k][j];
Aux[i][j] = Aux[i][j] % MOD;
}
}
}
void RidicareLaPutere(int p)
{
long long Mf[3][3];
int i, j;
for(i=0; i<3; i++)
for(j=0; j<3; j++)
Mf[i][j] = 0;
Mf[1][0] = 1;
Mf[2][1] = 1;
Mf[0][2] = c;
Mf[1][2] = b;
Mf[2][2] = a;
while(p)
{
if(p%2 == 1)
{
InmultireDoua(Sol, Mf);
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
Sol[i][j] = Aux[i][j];
}
}
InmultireDoua(Mf, Mf);
for(i=0; i<3; i++)
for(j=0; j<3; j++)
Mf[i][j] = Aux[i][j];
p = p/2;
}
}
void VectorOriMatrice(long long M[3], long long N[3][3])
{
int i, j;
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
Fin[i] += M[j] * N[j][i];
}
Fin[i] = Fin[i] % MOD;
}
}
int rez()
{
long long Inc[3];
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
{
Sol[i][j] = 0;
if(i==j)
{
Sol[i][j] = 1;
}
}
}
for(int i=0; i<3; i++)
{
Fin[i] = 0;
}
RidicareLaPutere(n-2);
Inc[0] = x;
Inc[1] = y;
Inc[2] = z;
VectorOriMatrice(Inc, Sol);
out<<Fin[2]<<endl;
}
int main()
{
in>>t;
int i;
for(i=0;i<t;i++)
{
citire();
rez();
}
return 0;
}