Pagini recente » Cod sursa (job #1798164) | Cod sursa (job #3184632) | Cod sursa (job #3248909) | Cod sursa (job #2716598) | Cod sursa (job #1318509)
#include<fstream>
#include<cstring>
using namespace std;
typedef int64_t var;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
const var MOD = 666013;
var INIT[3];
var KEY[3][3];
var i, j, k;
var AUX[3][3];
var RES[3][3];
void inmult(var M[3][3], var N[3][3], var R[3][3]) {
for(i=0; i<3; i++) //ind linie pt M
for(j=0; j<3; j++) {//ind coloana pt N
AUX[i][j] = 0;
for(k=0; k<3; k++) {//ind pt element
AUX[i][j] += (M[i][k] * N[k][j])%MOD;
AUX[i][j] %= MOD;
}
}
for(i=0; i<3; i++)
for(j=0; j<3; j++) {
R[i][j] = AUX[i][j];
}
}
void pow(var K[3][3], var n) {
while(n) {
if(n%2) {
inmult(RES, K, RES);
n--;
} else {
inmult(K, K, K);
n /= 2;
}
}
}
int main() {
var T, N, rez, A, B, C;
fin>>T;
while(T--) {
fin>>INIT[0]>>INIT[1]>>INIT[2]>>A>>B>>C;
KEY[0][0] = A; KEY[1][0] = B; KEY[2][0] = C;
KEY[1][1] = KEY[0][2] = KEY[2][1] = KEY[2][2] = 0;
KEY[0][1] = KEY[1][2] = 1;
RES[0][0] = RES[1][1] = RES[2][2] = 1;
RES[0][1] = RES[1][0] = RES[0][2] = RES[2][0] = RES[1][2] = RES[2][1] = 0;
fin>>N;
pow(KEY, N-2);
rez = (INIT[2]*RES[0][0]) % MOD;
rez += (INIT[1]*RES[1][0]) % MOD;
rez += (INIT[0]*RES[2][0]) % MOD;
rez %= MOD;
fout<<rez<<'\n';
}
}