Cod sursa(job #1824289)

Utilizator TataruTataru Mihai Tataru Data 7 decembrie 2016 17:37:01
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <cstring>

using namespace std;
const int MOD = 666013;
int A, B, C, X, Y, Z, N;
void inmul(int D[][3], int E[][3])
{
    int F[3][3];
    for(int i = 0; i < 3; ++i)
        for(int j = 0; j < 3; ++j)
        {
            long long aux = 0;
            for(int k = 0; k < 3; ++k)
                aux += ((long long)D[i][k]) * E[k][j];
            F[i][j] = aux % MOD;
        }
    memcpy(D, F, sizeof(F));
}

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 & 1) == 0)
        {
            inmul(M, M);
            n >>= 1;
        }
        inmul(P, M);
        n--;
    }
    return P[0][2];
}

int main()
{
    int t;
    ifstream fin("iepuri.in");
    ofstream fout("iepuri.out");
    fin >> t;
    while(t--)
    {
        fin >> X >> Y >> Z >> A >> B >> C >> N;
        fout << putere(N - 2) << endl;
    }
    fin.close();
    fout.close();
    return 0;
}