Cod sursa(job #183534)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 22 aprilie 2008 12:37:25
Problema Iepuri Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <stdio.h>
#include <stdlib.h>
#define mod 666013
long long n,a[4][4],t,rez,b[4][4],nr,c[4][4],q,r;
void power(long long ex){
	long long i, j, k;
	rez = 0;
	while (ex){
		if (ex%2==0){
			for (i=1; i<=3; ++i)
				for (j=1; j<=3;++j)
					for(k=1; k<=3; ++k)
						c[i][j] = ((c[i][j]%mod) + ((a[i][k]%mod)*(a[k][j]%mod))%mod)%mod;
			for (i=1; i<=3; ++i)
				for (j=1; j<=3; ++j)
                   a[i][j]=c[i][j];
			ex/=2;
		}
		else {
			for (i=1; i<=3; ++i)
				for (j=1; j<=3; ++j)
					for(k=1; k<=3; ++k)
						c[i][j] = ((c[i][j]%mod) + ((a[i][k]%mod)*(b[k][j]%mod))%mod)%mod;
			for (i=1; i<=3; ++i)
				for (j=1; j<=3; ++j)
                   b[i][j]=c[i][j];
			--ex;
		}
		for (i=1; i<=3; ++i)
			for (j=1; j<=3; ++j) c[i][j]=0;
	}
}

int main(){
	freopen("iepuri.in","r",stdin);
	freopen("iepuri.out","w",stdout);
	scanf("%lld",&t);
	long long x, y, z, A, B, C, i, j, k;
	while (t--){
		scanf("%lld %lld %lld %lld %lld %lld %lld", &x, &y, &z, &A, &B, &C, &n);
		a[1][1] = 0;		a[1][2] = 1;		a[1][3] = 0;
		a[2][1] = 0;		a[2][2] = 0;		a[2][3] = 1;
		a[3][1] = C;		a[3][2] = B;		a[3][3] = A;
		for (i=1; i<=3; ++i)
			for (j=1; j<=3; ++j)
               b[i][j]=a[i][j], c[i][j] = 0;
		power(n-1);
		a[1][1] = x;		a[1][2] = 0;		a[1][3] = 0;
		a[2][1] = y;		a[2][2] = 0;		a[2][3] = 0;
		a[3][1] = z;		a[3][2] = 0;		a[3][3] = 0;
		for ( i=1; i<=3; ++i)
			for (j=1; j<=3; ++j)
               c[i][j]=0;
		for (i=1; i<=3; ++i)
				for (j=1; j<=3; ++j)
					for(k=1; k<=3; ++k)
						c[i][j] = ((c[i][j]%mod) + ((b[i][k]%mod)*(a[k][j]%mod))%mod)%mod;
		printf("%lld\n",c[1][1]);
	}
	exit(0);
}