Cod sursa(job #203570)

Utilizator mihai_floreaFlorea Mihai Alexandru mihai_florea Data 17 august 2008 17:33:53
Problema Iepuri Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <string.h>
const int p=666013;
typedef long long matrix[4][4];
int T,x,y,z,a,b,c,n;
matrix A,B;
void mul(matrix A,matrix B){
    matrix C;
    int i,j,k;
    for (i=1;i<=3;++i)
     for (j=1;j<=3;++j){
         C[i][j]=0;
         for (k=1;k<=3;++k) C[i][j]+=A[i][k]*B[k][j];
         C[i][j]%=p;}
   for (i=1;i<=3;++i)
     for (j=1;j<=3;++j)
      A[i][j]=C[i][j];
} 

int solve(){
    A[1][1]=a;A[1][2]=b;A[1][3]=c;
    A[2][1]=1;A[2][2]=0;A[2][3]=0;
    A[3][1]=0;A[3][2]=1;A[3][3]=0;
    memset(B,0,sizeof(B));
    B[1][1]=B[2][2]=B[3][3]=1;
    while (n>0){
          if (n&1) mul(B,A);
          mul(A,A);
          n/=2;
          }
    return (B[3][1]*z+B[3][2]*y+B[3][3]*x)%p;
    }
int main(){
    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    scanf("%d",&T);
    while (T--){
          scanf("%d %d %d %d %d %d %d",&x,&y,&z,&a,&b,&c,&n);
          printf("%d\n",solve());
          }
    return 0;
}