Cod sursa(job #255468)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 9 februarie 2009 20:25:02
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#define MOD 666013
int x,y,z,a,b,c,n,T,aux[3][3],rez[3][3],B[3][3];
void power(){
  int i,j,k;
  while(n>0){
    if ((int)(n&1)==1){
      for (i=0;i<3;++i)
        for (j=0;j<3;++j){
          aux[i][j]=0;
          for (k=0;k<3;++k)
            aux[i][j]+=rez[i][k]*B[k][j];
        }
      for (i=0;i<3;++i)
        for (j=0;j<3;++j)rez[i][j]=aux[i][j]%MOD;
    }
    for (i=0;i<3;++i)
      for (j=0;j<3;++j){
        aux[i][j]=0;
        for (k=0;k<3;++k)
          aux[i][j]+=B[i][k]*B[k][j];
      }
    for (i=0;i<3;++i)
      for (j=0;j<3;++j)B[i][j]=aux[i][j]%MOD;
    n>>=1;
  }
}
int main(){
  freopen("iepuri.in","r",stdin);
  freopen("iepuri.out","w",stdout);
  scanf("%d",&T);
  for (;T;--T){
    scanf("%d %d %d %d %d %d %d",&x,&y,&z,&a,&b,&c,&n);
    n-=2;
    B[0][0]=0;B[0][1]=0;B[0][2]=c;
    B[1][0]=1;B[1][1]=0;B[1][2]=b;
    B[2][0]=0;B[2][1]=1;B[2][2]=a;
    //initializare
    rez[0][0]=1;rez[0][1]=0;rez[0][2]=0;
    rez[1][0]=0;rez[1][1]=1;rez[1][2]=0;
    rez[2][0]=0;rez[2][1]=0;rez[2][2]=1;
    power();
    printf("%d\n",(x*rez[0][2]+y*rez[1][2]+z*rez[2][2])%MOD);
  }
return 0;
}