Cod sursa(job #129365)

Utilizator MarquiseMarquise Marquise Data 29 ianuarie 2008 10:04:50
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <stdio.h>
#define MODULO 663013

long long n, a, b, c, i0, i1, i2, m[4][4], r[4][4], e[4][4];


void inmultire()
{
	int i, j, k;
	for ( i = 1; i <= 3; i++)
	for ( j = 1; j <= 3; j++)
		e[i][j] = 0;

	for ( i = 1; i <= 3; i++)
		for ( j = 1; j <= 3; j++)
			for ( k = 1; k <= 3; k++)
				e[i][j] += r[i][k] * r[k][j];
	for ( i = 1; i <= 3; i++)
	for ( j = 1; j <= 3; j++)
		r[i][j] = e[i][j] % MODULO;
}


void inmultirem()
{  	int i, j, k;
	for ( i = 1; i <= 3; i++)
	for ( j = 1; j <= 3; j++)
		e[i][j] = 0;

	for ( i = 1; i <= 3; i++)
		for ( j = 1; j <= 3; j++)
			for ( k = 1; k <= 3; k++)
				e[i][j] += r[i][k] * m[k][j];
	for ( i = 1; i <= 3; i++)
	for ( j = 1; j <= 3; j++)
		r[i][j] = e[i][j] % MODULO;
}

void putere(int n)
{
	if ( n >=1)
	{
		if ( n % 2 == 0)
		{
			putere(n/2);
			inmultire();
		}
		else
		{
			putere(n-1);
			inmultirem();
		}
	}
}

int main()
{
	long long rasp;
	freopen("iepuri.in", "r", stdin);
	freopen("iepuri.out", "w", stdout);
	scanf("%lld %lld %lld %lld %lld %lld %lld", &i0, &i1, &i2, &a, &b, &c, &n);
	m[1][2] = m[2][3] = 1;
	m[3][1] = c; m[3][2] = b; m[3][3] = a;
	r[1][1] = r[2][2] = r[3][3] = 1;
	putere(n);

	rasp = ( r[1][1] * i0 + r[1][2] * i1 + r[1][3] * i2) %MODULO ;
	printf("%lld\n", rasp);
	return 0;
}