Cod sursa(job #2465838)

Utilizator igsifvevc avb igsi Data 30 septembrie 2019 22:04:21
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
#include <tuple>

const uint64_t M = 1999999973;

uint64_t solve(uint64_t n, uint64_t p)
{
    uint64_t r = 1;

    while (p)
    {
        if (p & 1)
        {
            r = (r * n) % M;
        }

        n = (n * n) % M;
        p = p >> 1;
    }

    return r;
}

std::pair<uint64_t, uint64_t> read();
void write(uint64_t r);

int main()
{
    uint64_t n, p;

    std::tie(n, p) = read();
    auto r = solve(n, p);
    write(r);

    return 0;
}

std::pair<uint64_t, uint64_t> read()
{
    std::ifstream fin("lgput.in");
    int n, p;

    fin >> n >> p;

    return std::make_pair(n, p);
}

void write(uint64_t r)
{
    std::ofstream fout("lgput.out");

    fout << r << '\n';
}