Pagini recente » Cod sursa (job #2913801) | Cod sursa (job #1485588)
#include <stdio.h>
#define R 666013
#define ll long long
int t, test;
ll m[4][4], r[4][4];
void inmultire(ll a[][4], ll b[][4]);
void putmat(ll m[][4], ll rez[][4], int n);
int main(){
freopen("iepuri.in", "r", stdin);
freopen("iepuri.out", "w", stdout);
scanf("%d", &t);
for(test = 0; test < t; test++){
int x, y, z, a, b, c, n, i, j;
scanf("%d%d%d%d%d%d%d", &x, &y, &z, &a, &b, &c, &n);
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
r[i][j] = (i == j ? 1 : 0);
m[0][0] = 0 , m[0][1] = 1, m[0][2] = 0;
m[1][0] = m[1][1] = 0, m[1][2] = 1;
m[2][0] = c, m[2][1] = b, m[2][2] = a;
putmat(m, r, n - 2);
printf("%lld\n", (r[2][0] * x + r[2][1] * y + r[2][2] * z) % R);
}
return 0;
}
void inmultire(ll a[][4], ll b[][4]){
ll c[4][4];
int i, j;
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
c[i][j] = (a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j]) % R;
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
a[i][j] = c[i][j];
}
void putmat(ll m[][4], ll rez[][4], int n){
while(n > 0){
if(n & 1)
inmultire(rez, m);
n >>= 1;
inmultire(m, m);
}
}