Pagini recente » Cod sursa (job #2536215) | Cod sursa (job #2283243) | Cod sursa (job #230970) | Cod sursa (job #2884153) | Cod sursa (job #2665650)
#include <fstream>
#define MOD 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
struct Matrice{
long long a[4][4];
Matrice(int a1, int b, int c){
a[0][0] = a[0][1] = a[1][1] = a[2][0] = 0;
a[1][0] = a[2][1] = 1;
a[2][2] = a1;
a[1][2] = b;
a[0][2] = c;
}
Matrice(){}
void zeroz(){
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
a[i][j] = 0;
}
void identity(){
for(int i=0; i<3; i++){
for(int j=0; j<3; j++)
a[i][j] = 0;
a[i][i] = 1;
}
}
Matrice &operator*(const Matrice &a){
Matrice rez;
rez.zeroz();
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
for(int k=0; k<3; k++)
rez.a[i][j] += ((1LL*(this->a[i][k]) * (this->a[k][j]))%MOD);
return rez;
}
Matrice& operator=(const Matrice &b){
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
this->a[i][j] = b.a[i][j];
return *this;
}
};
Matrice inmult(Matrice a, Matrice b){
Matrice rez;
rez.zeroz();
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
for(int k=0; k<3; k++)
rez.a[i][j] += ((1LL*(a.a[i][k]) * (b.a[k][j]))%MOD);
return rez;
}
Matrice ridicare_putere(Matrice a, int p){
Matrice rez;
rez.identity();
while(p!=0)
{
if(p%2 ==1)
{
p--;
rez=inmult(rez, a);
}
p/=2;
a=inmult(a, a);
}
return rez;
}
int main()
{
int t, x, y, z, a, b, c, n;
f>>t;
for(int i=0; i<t; i++){
f>>x>>y>>z>>a>>b>>c>>n;
Matrice a1 = Matrice(a, b, c);
Matrice rez = ridicare_putere(a1, n-2);
g<<((x*rez.a[0][2]%MOD + y*rez.a[1][2]%MOD)%MOD + z*rez.a[2][2]%MOD)%MOD<<'\n';
}
return 0;
}