Cod sursa(job #108935)

Utilizator FlorianFlorian Marcu Florian Data 24 noiembrie 2007 10:49:15
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<stdio.h>
#include<string.h>
#define Mod 666013
#define Max 6
FILE*f=fopen("iepuri.in","r");
FILE*g=fopen("iepuri.out","w");
long long unsigned A,B,C,a[Max][Max],sol[Max][Max],n,x,y,z,p[Max][Max];
void init()
	{
	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;
	p[1][1]=x; p[2][1]=y; p[3][1]=z;
	for(int i=1;i<=3;++i) for(int j=1;j<=3;++j) sol[i][j]=a[i][j];
	}
void inmultire(long long unsigned a[][Max], long long unsigned b[][Max])
	{
	long long unsigned i,j,k,c[Max][Max];
	memset(c,0,sizeof(c));
	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]%Mod;
	}
void solve()
	{
	long long unsigned c[Max][Max],i,j,k;
	memset(c,0,sizeof(c));
	n--;
	while(n!=0)
		{
		if(n%2==0)
			{
			inmultire(a,a);
			n/=2;
			}
		else
			{
			inmultire(a,sol);
			n--;
			}
		}
	for(i=1;i<=3;++i)
		for(j=1;j<=1;++j)
			for(k=1;k<=3;++k)
			c[i][j]=(c[i][j]%Mod+((sol[i][k])%Mod*(p[k][j]%Mod))%Mod)%Mod;
	fprintf(g,"%llu\n",c[1][1]%Mod);
	}
int main()
	{
	long t;
	fscanf(f,"%llu",&t);
	for(int i=1;i<=t;++i)
		{
		fscanf(f,"%llu %llu %llu %llu %llu %llu %llu",&x,&y,&z,&A,&B,&C,&n);
		init();
		solve();
		}
	return 0;
	}