Pagini recente » Cod sursa (job #2479123) | Cod sursa (job #1966078) | Cod sursa (job #2744860) | Cod sursa (job #606028) | Cod sursa (job #1792309)
#include <iostream>
#include <fstream>
const int MOD = 666013;
//a = b * c
void multiply(long long a[3][3], long long b[3][3], long long c[3][3]){
long long res[3][3];
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
res[i][j] = 0;
}
}
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
for(int k = 0; k < 3; k++){
res[i][j] = (res[i][j] % MOD + ((b[i][k] % MOD) * (c[k][j] % MOD) % MOD)) % MOD;
}
}
}
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
a[i][j] = res[i][j];
}
}
}
// a = b ^ n
void power(long long a[3][3], long long b[3][3], int n){
long long res[3][3];
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
res[i][j] = (i == j);
}
}
while(n > 0){
if(n % 2 == 0){
multiply(b, b, b);
n /= 2;
}else{
multiply(res, res, b);
n--;
}
}
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
a[i][j] = res[i][j];
}
}
}
int main(){
std::ifstream fin("iepuri.in");
std::ofstream fout("iepuri.out");
int t, x, y, z, a, b, c, n;
long long A[3][3];
fin >> t;
for(int i = 0; i < t; i++){
fin >> x >> y >> z >> a >> b >> c >> n;
A[0][0] = 0;
A[0][1] = 1;
A[0][2] = 0;
A[1][0] = 0;
A[1][1] = 0;
A[1][2] = 1;
A[2][0] = c;
A[2][1] = b;
A[2][2] = a;
long long B[3][3];
power(B, A, n - 2);
fout << ((B[2][0] % MOD * (x % MOD)) % MOD + (B[2][1] % MOD * (y % MOD)) % MOD + (B[2][2] % MOD * (z % MOD))) % MOD << "\n";
}
fin.close();
fout.close();
return 0;
}