Cod sursa(job #396321)

Utilizator SzabiVajda Szabolcs Szabi Data 14 februarie 2010 22:33:11
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <stdio.h>
typedef long long tipus;
tipus t,x,y,z,a,b,c,n,m=666013;

void masol(tipus a[4][4],tipus b[4][4]){
b[1][1]=a[1][1];
b[1][2]=a[1][2];
b[1][3]=a[1][3];
b[2][1]=a[2][1];
b[2][2]=a[2][2];
b[2][3]=a[2][3];
b[3][1]=a[3][1];
b[3][2]=a[3][2];
b[3][3]=a[3][3];
}

void szoroz(tipus c[4][4],tipus b[4][4]){
tipus b11=b[1][1],b12=b[1][2],b13=b[1][3],b21=b[2][1],b22=b[2][2],b23=b[2][3],b31=b[3][1],b32=b[3][2],b33=b[3][3];
tipus a[4][4];
masol(c,a);
b[1][1]=((a[1][1]*b11)%m+(a[1][2]*b21)%m+(a[1][3]*b31)%m)%m;
b[1][2]=((a[1][1]*b12)%m+(a[1][2]*b22)%m+(a[1][3]*b32)%m)%m;
b[1][3]=((a[1][1]*b13)%m+(a[1][2]*b23)%m+(a[1][3]*b33)%m)%m;
b[2][1]=((a[2][1]*b11)%m+(a[2][2]*b21)%m+(a[2][3]*b31)%m)%m;
b[2][2]=((a[2][1]*b12)%m+(a[2][2]*b22)%m+(a[2][3]*b32)%m)%m;
b[2][3]=((a[2][1]*b13)%m+(a[2][2]*b23)%m+(a[2][3]*b33)%m)%m;
b[3][1]=((a[3][1]*b11)%m+(a[3][2]*b21)%m+(a[3][3]*b31)%m)%m;
b[3][2]=((a[3][1]*b12)%m+(a[3][2]*b22)%m+(a[3][3]*b32)%m)%m;
b[3][3]=((a[3][1]*b13)%m+(a[3][2]*b23)%m+(a[3][3]*b33)%m)%m;

}

void hatvany(tipus a[4][4],tipus k){

	if(k==1){
		}else{
			if(k%2==0){
			szoroz(a,a);
			hatvany(a,k/2);
			
		
			}else{
			tipus c[4][4];
				masol(a,c);
				szoroz(a,a);
			hatvany(a,(k-1)/2);
			szoroz(c,a);
	
			}
		}
	
}


int main(){
	freopen("kfib.in","r",stdin);
	freopen("kfib.out","w",stdout);
scanf("%lld",&t);
tipus aa[4][4],i,temp;

for(i=1;i<=t;i++){

	scanf("%lld %lld %lld %lld %lld %lld %lld",&x,&y,&z,&a,&b,&c,&n); 

aa[1][1]=0;aa[1][2]=0;aa[1][3]=c;
aa[2][1]=1;aa[2][2]=0;aa[2][3]=b;
aa[3][1]=0;aa[3][2]=1;aa[3][3]=a;

hatvany(aa,n-2);

temp=x*aa[1][3]+y*aa[2][3]+z*aa[3][3];

printf("%lld",temp);

}
return 0;
}