Cod sursa(job #161247)

Utilizator FlorinC1996Florin C FlorinC1996 Data 17 martie 2008 19:52:15
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <stdio.h>   
  
long long a[4][4], kkt[4][4], rez[4][4];   
  
void mul(long long a[4][4], long long b[4][4])   
{   
    int i, j, k, c[4][4];   
    for (i = 1; i <= 3; i ++) {   
        for (j = 1; j <= 3; j ++) c[i][j] = 0;   
        for (j = 1; j <= 3; j ++) {   
            for (k = 1; k <= 3; k ++) {   
                c[i][k] += ((long long) (a[i][j] * b[j][k])) % 666013;   
            }   
        }   
    }   
  
    for (i = 1; i <= 3; i ++) {   
        for (j = 1; j <= 3; j ++) a[i][j] = c[i][j];   
    }   
}   
  
void putere(int N)   
{   
    for (; N; N >>= 1) {   
        if (N & 1) mul(rez, kkt);   
        mul(kkt, kkt);   
    }   
}   
  
int main()   
{   
    freopen("iepuri.in", "r", stdin);   
#ifndef _SCREEN_   
    freopen("iepuri.out", "w", stdout);   
#endif   
  
    int T, X, Y, Z, A, B, C, N, i, j;   
    for (scanf("%d\n", &T); T; T --) {   
        scanf("%d %d %d %d %d %d %d\n", &X, &Y, &Z, &A, &B, &C, &N);   
  
        a[1][1] = 0, a[1][2] = 0, a[1][3] = C;   
        a[2][1] = 1, a[2][2] = 0, a[2][3] = B;   
        a[3][1] = 0, a[3][2] = 1, a[3][3] = A;   
  
        rez[1][1] = 1, rez[1][2] = 0, rez[1][3] = 0;   
        rez[2][1] = 0, rez[2][2] = 1, rez[2][3] = 0;   
        rez[3][1] = 0, rez[3][2] = 0, rez[3][3] = 1;   
  
        for (i = 1; i <= 3; i ++) {   
            for (j = 1; j <= 3; j ++) {   
                kkt[i][j] = a[i][j];   
            }   
        }   
  
        putere(N - 2);   
  
        printf("%lld\n", (((long long) X * rez[1][3]) % 666013 + ((long long) Y * rez[2][3] % 666013) + ((long long) Z * rez[3][3]) % 666013) % 666013);   
    }   
  
    return 0;   
}