Pagini recente » Cod sursa (job #1525985) | Cod sursa (job #641564) | Cod sursa (job #2467703) | Cod sursa (job #395234) | Cod sursa (job #3142789)
#include <fstream>
using namespace std;
ifstream cin ("iepuri.in");
ofstream cout ("iepuri.out");
const int mod = 666013;
struct Matrice {
long long valori[3][3];
Matrice operator * (Matrice factor) {
Matrice rezultat;
for (int linie = 0 ; linie <= 2 ; linie++)
for (int coloana = 0 ; coloana <= 2 ; coloana++) {
rezultat.valori[linie][coloana] = 0;
for (int indice = 0 ; indice <= 2 ; indice++)
(rezultat.valori[linie][coloana] += (*this).valori[linie][indice] * factor.valori[indice][coloana] % mod) %= mod;
}
return rezultat;
}
};
Matrice Exponentiere (Matrice baza , int exponent)
{
if (exponent == 1)
return baza;
Matrice factor = Exponentiere(baza , exponent >> 1);
if (exponent & 1) return factor * factor * baza;
return factor * factor;
}
int main ()
{
int teste;
cin >> teste;
for (int test = 1 , termen[3] , factor[3] , zi ; test <= teste ; test++) {
cin >> termen[0] >> termen[1] >> termen[2] >> factor[0] >> factor[1] >> factor[2] >> zi;
if (zi <= 3) cout << termen[zi - 1] << '\n';
else {
Matrice rezultat;
for (int linie = 0 ; linie <= 2 ; linie++)
rezultat.valori[linie][0] = factor[linie] , rezultat.valori[linie][1] = rezultat.valori[linie][2] = 0;
rezultat.valori[0][1] = rezultat.valori[1][2] = 1; rezultat = Exponentiere(rezultat , zi - 2);
cout << ((termen[2] * rezultat.valori[0][0] % mod + termen[1] * rezultat.valori[1][0] % mod) % mod + termen[0] * rezultat.valori[2][0] % mod) % mod << '\n';
}
}
cout.close(); cin.close();
return 0;
}