Cod sursa(job #1819294)

Utilizator calin9819Costea Calin calin9819 Data 30 noiembrie 2016 14:41:53
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <cstring>
using namespace std;

int T, A, B, C, X, Y, Z, N;

void mult (int m1[3][3], int m2[3][3]) {
    int i, j, k;
    int m[3][3];
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            long long x = 0;
            for (k = 0; k < 3; k++) {
                x += (long long) m1[i][k] * m2[k][j];
                m[i][j] = x % 666013;
            }
        }
    }
    memcpy(m1, m, sizeof(m));
}

int putere(int n)
{
    int M[3][3] = {{0, 0, C}, {1, 0, B}, {0, 1, A}};
    int P[3][3] = {{X, Y, Z}, {0, 0, 0}, {0, 0, 0}};
    while(n > 0)
    {
        while(n % 2 == 0)
        {
            mult(M, M);
            n /= 2;
        }
        mult(P, M);
        n--;
    }
    return P[0][2];
}


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", putere(N - 2));
    }
    return 0;
}