Cod sursa(job #2230369)

Utilizator katanau26@yahoo.comIonut Barbu [email protected] Data 9 august 2018 21:25:27
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <iostream>
#include <fstream>

using namespace std;

const int MOD = 666013;
int t, x, y, z, a, b, c, n, S[3][3];

bool prim(int n)
{
    if (n < 2 || (n % 2 == 0 && n != 2))
        return false;
    for (int i = 3; i * i <= n; i+= 2)
        if (n % i == 0)
            return false;
    return true;
}

void init()
{
    for (int i = 0; i < 3; ++i)
        for (int j = 0; j < 3; ++j)
            S[i][j] = 0;
    S[0][0] = S[1][1] = S[2][2] = 1;
}

void prodMat(int A[3][3], int B[3][3])
{
    int i, j, C[3][3];

    for (i = 0; i <= 2; ++i)
        for (j = 0; j <= 2; ++j)
        {
            C[i][j] = 0;
            for (int k = 0; k <= 2; ++k)
                C[i][j] = C[i][j] + A[i][k] * B[k][j];
        }

    for (i = 0; i <= 2; ++i)
        for (j = 0; j <= 2; ++j)
            A[i][j] = C[i][j];

}

void putere(int y)
{
    int M[3][3] = {{a, b, c}, {1, 0, 0}, {0, 1, 0}};

    while (y)
    {
        if (y & 1)
            prodMat(S, M);
        prodMat(M, M);
        y = y >> 1;
    }
}

int main()
{
    ifstream fin("iepuri.in");
    ofstream fout("iepuri.out");

    fin>>t;
    for (int i = 1; i <= t; ++i)
    {
        fin>>x>>y>>z>>a>>b>>c>>n;
        init();
        putere( (n - 2) % (MOD - 1) );
        fout<<( S[0][0] * z % MOD + S[0][1] * y % MOD + S[0][2] * x % MOD ) % MOD << "\n";
    }

    fin.close();
    fout.close();

    return 0;
}