Pagini recente » Cod sursa (job #1807893) | Cod sursa (job #3329437) | Cod sursa (job #98180) | Cod sursa (job #3337635) | Cod sursa (job #3352234)
#include <fstream>
using namespace std;
const int MOD = 666013;
typedef long long ll;
typedef ll Matrice[3][3];
void inmult_matrice(Matrice a, Matrice b, Matrice rezultat) {
ll tmp[3][3] = {};
for(int i = 0; i < 3; i++)
for(int k = 0; k < 3; k++)
if(a[i][k])
for(int j = 0; j < 3; j++)
tmp[i][j] = (tmp[i][j] + a[i][k] * b[k][j]) % MOD;
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
rezultat[i][j] = tmp[i][j];
}
void exponentiere(Matrice m, int p, Matrice rez) {
// rez = matricea identitate
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
rez[i][j] = (i == j) ? 1 : 0;
while(p > 0) {
if(p % 2 == 1)
inmult_matrice(rez, m, rez); // rez = rez * m
inmult_matrice(m, m, m); // m = m * m (safe cu tmp intern)
p /= 2;
}
}
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
int main() {
int T;
fin >> T;
while(T--) {
ll X, Y, Z, A, B, C;
int N;
fin >> X >> Y >> Z >> A >> B >> C >> N;
if(N == 0) { fout << X % MOD << "\n"; continue; }
if(N == 1) { fout << Y % MOD << "\n"; continue; }
if(N == 2) { fout << Z % MOD << "\n"; continue; }
Matrice m = { {A, B, C}, {1, 0, 0}, {0, 1, 0} };
Matrice rez;
exponentiere(m, N - 2, rez);
ll iepuri = (Z % MOD * rez[0][0] % MOD
+ Y % MOD * rez[0][1] % MOD
+ X % MOD * rez[0][2] % MOD) % MOD;
fout << iepuri << "\n";
}
return 0;
}