Pagini recente » Cod sursa (job #142178) | Cod sursa (job #929186) | Cod sursa (job #2832223) | Cod sursa (job #856436) | Cod sursa (job #3124094)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
const int MOD = 666013;
int T, X, Y, Z, A, B, C, N;
int M_rez[4][4], M_static[4][4];
void citire() {
fin >> X >> Y >> Z >> A >> B >> C >> N;
}
void copiere(int a[4][4], int b[4][4]) {
for (int i = 1; i <= 3; i++)
for (int j = 1; j <= 3; j++)
a[i][j] = b[i][j];
}
void init() {
M_rez[1][1] = 1;
M_rez[1][2] = 0;
M_rez[1][3] = 0;
M_rez[2][1] = 0;
M_rez[2][2] = 1;
M_rez[2][3] = 0;
M_rez[3][1] = 0;
M_rez[3][2] = 0;
M_rez[3][3] = 1;
M_static[1][1] = A;
M_static[1][2] = B;
M_static[1][3] = C;
M_static[2][1] = 1;
M_static[2][2] = 0;
M_static[2][3] = 0;
M_static[3][1] = 0;
M_static[3][2] = 1;
M_static[3][3] = 0;
}
void inmultire_matrici(int a[4][4], int b[4][4]) {
int c[4][4];
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
c[i][j] = 0;
for (int k = 1; k <= 3; k++) {
c[i][j] += (1LL * a[i][k] * b[k][j]) % MOD;
c[i][j] = c[i][j] % MOD;
}
}
}
for (int i = 1; i <= 3; i++)
for (int j = 1; j <= 3; j++)
a[i][j] = c[i][j];
}
/*
vector <int> binary(int num) {
vector <int> v;
int r;
while (num) {
r = num % 2;
num /= 2;
v.push_back(r);
};
reverse(v.begin(), v.end());
return v;
}
void iepuri(vector <int> v) {
if (v[0] == 0) {
v.pop_back();
copiere(M_rez, M_static);
}
for (int i = 0; i < v.size(); i++) {
if (v[i] == 1) {
inmultire_matrici(M_rez, M_rez);
inmultire_matrici(M_rez, M_static);
}
else {
inmultire_matrici(M_rez, M_rez);
}
}
cout << "Afisare numar: ";
cout << Z * M_rez[1][1] + Y * M_rez[1][2] + X * M_rez[1][3] << '\n';
}
void afisare_rez() {
cout << '\n';
for (int i = 1; i <= 3; i++, cout << '\n')
for (int j = 1; j <= 3; j++)
cout << M_rez[i][j] << " ";
cout << '\n';
}
*/
void iepuriBitWise() {
N = N - 2;
while (N) {
if (N & 1) {
inmultire_matrici(M_rez, M_static);
N--;
}
inmultire_matrici(M_static, M_static);
N >>= 1;
}
fout << (1LL * Z * M_rez[1][1] + Y * M_rez[1][2] + X * M_rez[1][3] ) % MOD << '\n';
}
int main() {
fin >> T;
for (int i = 1; i <= T; i++) {
citire();
init();
iepuriBitWise();
}
fin.close();
fout.close();
return 0;
}