Cod sursa(job #402086)

Utilizator andreirRoti Andrei andreir Data 23 februarie 2010 14:12:22
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
/*	
	0 1 0
z=  0 0 1   
	c b a 

z^(n-2) *(v0,v1,v2) = (v[n-2],v[n-1],v[n]); ->>ceva de genu :))
*/

#include<stdio.h>
#define m 666013


int main()
{
	int x,y,t,a,b,c,n,i,j;
	freopen("iepuri.in","r",stdin);
	freopen("iepuri.out","w",stdout);
	scanf("%d %d %d %d %d %d %d",&x,&y,&t,&a,&b,&c,&n);
	n=n-2;
	
	int sol[3][3]={{1,0,0},{0,1,0},{0,0,1}},z[3][3]={{0,1,0},{0,0,1},{c,b,a}},aux[3][3];
	
	while(n!=0)
	{
		if( (n&1) == 1)
		//sol=sol*z
		{
			//formeaza matricea
			for(i=0;i<=2;i++)	for(j=0;j<=2;j++)	
				aux[i][j]=(sol[i][0]*z[0][j])%m + (sol[i][1]*z[1][j])%m + (sol[i][2]*z[2][j])%m  ;
			//atribuire
			for(i=0;i<=2;i++)	for(j=0;j<=2;j++)	sol[i][j]=aux[i][j]%m;
		}
		//z= z*z ;
		for(i=0;i<=2;i++)	for(j=0;j<=2;j++)	aux[i][j]=(z[i][0]*z[0][j])%m + (z[i][1]*z[1][j])%m + (z[i][2]*z[2][j])%m  ;
		//atribuire
		for(i=0;i<=2;i++)	for(j=0;j<=2;j++)	z[i][j]=aux[i][j]%m;
		n=n>>1;
	}
	
	printf("%d",x*sol[2][0]+y*sol[2][1]+t*sol[2][2]);

	return 0;
}