Pagini recente » Cod sursa (job #1479454) | Cod sursa (job #2097079) | Cod sursa (job #1440549) | Cod sursa (job #2246069) | Cod sursa (job #762092)
Cod sursa(job #762092)
#include <iostream>
#include <fstream>
#define NMAX 666013
#define ll long long
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
ll M[3][3], P[3][3], aux[3][3];
void mult(ll A[3][3], ll B[3][3]) {
ll i,j,k,sum;
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++) {
sum = 0;
for(k = 0; k < 3; k++)
sum += (ll)(A[i][k]*B[k][j])%NMAX;
aux[i][j] = (ll)sum%NMAX;
}
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
A[i][j] = aux[i][j];
}
int exp(ll A, ll B, ll C, ll n) {
n -= 2;
M[0][0] = A, M[0][1] = B, M[0][2] = C;
M[1][0] = 1, M[1][1] = 0, M[1][2] = 0;
M[2][0] = 0, M[2][1] = 1, M[2][2] = 0;
P[0][0] = 1, P[0][1] = 0, P[0][2] = 0;
P[1][0] = 0, P[1][1] = 1, P[1][2] = 0;
P[2][0] = 0, P[2][1] = 0, P[2][2] = 1;
while(n) {
if(n&1)
mult(P,M);
mult(M,M);
n >>= 1;
}
}
int main() {
ll X,Y,Z,A,B,C,n,T,i;
f>>T;
for(i = 0; i < T; i++) {
f>>X>>Y>>Z>>A>>B>>C>>n;
exp(A,B,C,n);
g<<((ll)P[0][0]*Z%NMAX+(ll)P[0][1]*Y%NMAX+P[0][2]*(ll)X%NMAX)%NMAX<<"\n";
}
return 0;
}