Cod sursa(job #552641)

Utilizator laurionLaurentiu Ion laurion Data 12 martie 2011 17:32:18
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
//cp
#include <stdio.h>
#include <string.h>
#define MOD 666013
int x[3];
int A, B, C, n;
void inmultire(int a[][3], int b[][3]){
	int c[3][3] = {0};
	int i, j, k;
	for(i = 0; i < 3; ++i)
		for(j = 0; j < 3; ++j)
			for(k = 0; k < 3; ++k)
				c[i][j] = (c[i][j] + ((long long)a[i][k] * b[k][j]%MOD)) % MOD;
	memcpy(a, c, sizeof(c));
}
void solve(){
	int a[3][3] = { {0,0,C}, {1, 0, B},{0, 1, A} };
	int sol[3][3]={ {1,0,0}, {0,1,0} , {0,0,1}};
	//sol[0][0] = sol[1][1] = sol[2][2] = 1;
	n -= 2;
	for(; n; (n >>=1) ){
		if(n & 1)
			inmultire(sol, a);
		inmultire(a, a);
	}
	int s = 0;
	for(int i = 0; i < 3; ++i)
		s = (s + (long long)sol[i][2]*x[i]%MOD)% MOD;
	printf("%d\n", s);
}
int main(){
	int t;
	freopen("iepuri.in", "r", stdin);
	freopen("iepuri.out", "w", stdout);
	scanf("%d", &t);
	while(t){
		--t;
		scanf("%d%d%d %d%d%d%d", &x[0], &x[1], &x[2], &A, &B, &C, &n);
		solve();
	}
	return 0;
}