Pagini recente » Cod sursa (job #257719) | Cod sursa (job #2644737) | Cod sursa (job #3269125) | Cod sursa (job #3279900) | Cod sursa (job #2879363)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
#define DIM 3
#define MOD 666013
int t, z0, z1, z2, A, B, C, n;
int sol[DIM][DIM], c[DIM][DIM];
static inline void InmultireMatrici(int a[DIM][DIM], int b[DIM][DIM]) {
int ans[DIM][DIM];
for(int i = 0; i < DIM; i++)
for(int j = 0; j < DIM; j++) {
ans[i][j] = 0;
for(int k = 0; k < DIM; k++)
ans[i][j] = (1LL * ans[i][j] + 1LL * a[i][k] * b[k][j]) % MOD;
}
for(int i = 0; i < DIM; i++)
for(int j = 0; j < DIM; j++)
a[i][j] = ans[i][j];;
}
static inline void Putere(int c[DIM][DIM], int n) {
int ans[DIM][DIM]; //matricea unitate;
for(int i = 0; i < DIM; i++)
for(int j = 0; j < DIM; j++)
if(i == j)
ans[i][j] = 1;
else ans[i][j] = 0;
while(n) {
if(n % 2 == 1)
InmultireMatrici(ans, c);
n >>= 1;
InmultireMatrici(c, c);
}
for(int i = 0; i < DIM; i++)
for(int j = 0; j < DIM; j++)
c[i][j] = ans[i][j];
}
int main() {
fin >> t;
while(t--) {
fin >> z0 >> z1 >> z2;
fin >> A >> B >> C >> n;
//matricea calculata;
c[0][0] = A;
c[1][0] = B;
c[2][0] = C;
c[0][1] = c[1][2] = 1;
c[0][2] = c[1][1] = c[2][1] = c[2][2] = 0;
sol[0][0] = z2;
sol[0][1] = z1;
sol[0][2] = z0;
Putere(c, n);
InmultireMatrici(sol, c);
fout << sol[0][2] << '\n';
}
return 0;
}