Pagini recente » Cod sursa (job #2264193) | Cod sursa (job #2500107) | Cod sursa (job #1553381) | Cod sursa (job #1985401) | Cod sursa (job #804754)
Cod sursa(job #804754)
#include <fstream>
#include <cstring>
#include <cassert>
#include <iostream>
using namespace std;
const long long MOD = 666013;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
long long t,n,a,b,c,x,y,z,i,q,j;
long long mat[3][3], mo[3][3];
void mmult(long long a[3][3], long long b[3][3], long long c[3][3]) {
static long long i, j, k;
for(i=0; i<3; i++)
for(j=0; j<3; j++) {
a[i][j] = 0;
for(k=0; k<3; k++)
a[i][j] = (a[i][j] + (b[i][k] * c[k][j])%MOD)%MOD;
}
}
void mpow(long long m[3][3], long long mo[3][3], long long n) {
static long long p[3][3], i, j;
assert(n > 0);
if(n == 1)
return;
mpow(m, mo, n/2);
mmult(p, m, m);
if(n%2 == 1) {
mmult(m, p, mo);
} else {
for(i=0; i<3; i++)
for(j=0; j<3; j++)
m[i][j] = p[i][j];
}
for(i=0; i<3; i++) {
for(j=0; j<3; j++)
m[i][j] = m[i][j] % MOD;
}
}
int main() {
in>>t;
while(t--) {
in>>x>>y>>z>>a>>b>>c>>n;
mat[0][0] = 0;
mat[0][1] = 1;
mat[0][2] = 0;
mat[1][0] = 0;
mat[1][1] = 0;
mat[1][2] = 1;
mat[2][0] = c%MOD;
mat[2][1] = b%MOD;
mat[2][2] = a%MOD;
for(i=0; i<3; i++) {
for(j=0; j<3; j++)
mo[i][j] = mat[i][j];
}
mpow(mat, mo, n);
a = ((mat[0][0]%MOD * x)%MOD + (mat[0][1]%MOD * y)%MOD + (mat[0][2]%MOD * z)%MOD)%MOD;
out<<a<<"\n";
}
}