Cod sursa(job #2450122)

Utilizator EckchartZgarcea Robert-Andrei Eckchart Data 21 august 2019 23:29:16
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <fstream>
//#include <iostream>
/* 0 <= T <= 100;
 * 1 <= X <= Y <= Z <= 10.000;
 * 1 <= A, B, C <= 1.000;
 * 3 <= N <= 2.000.000.000.
 */
short T, X, Y, Z, A, B, C;
long N;
const long M = 666013;


unsigned long long mod_exp(unsigned long long base,
                           unsigned long long exponent,
                           unsigned long long modulus)
{
    if (modulus == 1)
    {
        return 0;
    }
    else
    {
        unsigned long long result = 1;
        base %= modulus;
        while (exponent > 0)
        {
            if (exponent % 2 != 0)
            {
                result = (result * base) % modulus;
            }
            exponent >>= 1;
            base = (base * base) % modulus;
        }
        return result;
    }
}


// Nr. of rabbits on the N-th day, modulo 666013. (lMOao)s
unsigned long long N_day(long long i = N)
{
    if (i == 0)
    {
        return X;
    }
    if (i == 1)
    {
        return Y;
    }
    if (i == 2)
    {
        return Z;
    }
    else
    {
        unsigned long long
        result = mod_exp(A * N_day(i - 1) + B * N_day(i - 2) + C * N_day(i - 3), 1, M);
        return result;
    }
}


int main()
{
    std::ifstream fisierIN("iepuri.in");
    std::ofstream fisierOUT("iepuri.out");
    // if T == 0 fisierOUT << X ????
    // else:
    fisierIN >> T;
    for (int i = 0; i < T; ++i)
    {
        fisierIN >> X >> Y >> Z >> A >> B >> C >> N;
        fisierOUT << N_day() << "\n";
    }
    fisierIN.close();
    fisierOUT.close();
    //std::cin >> X >> Y >> Z >> A >> B >> C >> N;
   // std::cout << N_day();
    return 0;
}


// Z(0) = X;
// Z(i) = A * Z(i - 1) + B * Z(i - 2) + C * Z(i - 3) for
// 3 <= i <= N.