Cod sursa(job #129876)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 30 ianuarie 2008 15:21:05
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <stdio.h>

int a[4][4], kkt[4][4], rez[4][4];

void mul(int a[4][4], int b[4][4])
{
	int i, j, k, c[4][4];
	for (i = 1; i <= 3; i ++) {
		for (j = 1; j <= 3; j ++) c[i][j] = 0;
		for (j = 1; j <= 3; j ++) {
			for (k = 1; k <= 3; k ++) {
				c[i][k] += a[i][j] * b[j][k];
			}
		}
	}

	for (i = 1; i <= 3; i ++) {
		for (j = 1; j <= 3; j ++) a[i][j] = c[i][j];
	}
}

void putere(int N)
{
	int i;

	for (i = 0; i < 32; i ++) {
		if (N & (1 << i)) mul(rez, kkt);
		mul(kkt, kkt);
	}
}

int main()
{
	freopen("iepuri.in", "r", stdin);
#ifndef _SCREEN_
	freopen("iepuri.out", "w", stdout);
#endif

	int T, X, Y, Z, A, B, C, N, i, j;
	for (scanf("%d\n", &T); T; T --) {
		scanf("%d %d %d %d %d %d %d\n", &X, &Y, &Z, &A, &B, &C, &N);

		a[1][1] = 0, a[1][2] = 0, a[1][3] = C;
		a[2][1] = 1, a[2][2] = 0, a[2][3] = B;
		a[3][1] = 0, a[3][2] = 1, a[3][3] = A;

		rez[1][1] = 1, rez[1][2] = 0, rez[1][3] = 0;
		rez[2][1] = 0, rez[2][2] = 1, rez[2][3] = 0;
		rez[3][1] = 0, rez[3][2] = 0, rez[3][3] = 1;

		for (i = 1; i <= 3; i ++) {
			for (j = 1; j <= 3; j ++) {
				kkt[i][j] = a[i][j];
			}
		}

		putere(N - 2);

		printf("%lld\n", ((long long) X * rez[1][3]) % 666013 + ((long long) Y * rez[2][3] % 666013) + ((long long) Z * rez[3][3]) % 666013);
	}

	return 0;
}