Cod sursa(job #590025)

Utilizator AnteusPatrascoiu Mihai Anteus Data 14 mai 2011 23:16:45
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#include <string.h>
#define mod 666013
FILE *f=fopen ("iepuri.in", "r");
FILE *g=fopen ("iepuri.out", "w");
int T,x,y,z,n,i,j,v[100];
long long A[4][4],B[4][4],sol;

void inmultire (long long A[4][4], long long B[4][4]) {
long long C[4][4];
int i,j,k;
memset (C, 0, sizeof(C));

for (k=1;k<=3;k++)
	for (i=1;i<=3;i++)
		for (j=1;j<=3;j++)
			C[k][i]=( C[k][i]%mod + ((A[k][j]%mod)*(B[j][i]%mod))%mod )%mod;
memcpy (A, C, sizeof(C));
}

int main() {
fscanf (f, "%d", &T);

for ( ; T ; T--)
{
	memset (A, 0, sizeof(A));
	fscanf (f, "%lld%lld%lld%d%d%d%d", &A[1][1],&A[1][2],&A[1][3],&x,&y,&z,&n);
	A[2][1]=1;	A[3][2]=1;	memcpy (B, A, sizeof(A));	i=0;	n-=2;
	
	while (n)
	{
		v[++i]=n%2;
		n/=2;
	}
	
	for (j=i-1;j>=1;j--)
	{
		inmultire (A, A);
		if (v[j])
			inmultire (A, B);
	}
sol= (A[1][1]*x)%mod + (A[1][2]*y)%mod + (A[1][3]*z)%mod;
fprintf (g, "%lld\n", sol%mod);
}

return 0;
}