Cod sursa(job #2776940)

Utilizator andcovAndrei Covaci andcov Data 21 septembrie 2021 17:36:40
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
//
// Created by Andrei Covaci on 03.09.2021.
// https://infoarena.ro/problema/ciur
//

#include <fstream>
#include <iostream>
#include <vector>
#include <map>

#define INPUT "lgput.in"
#define OUTPUT "lgput.out"
//#define INPUT "input.in"
//#define OUTPUT "output.out"

using namespace std;


pair<long long, int> read() {
    ifstream in(INPUT);

    int a, b;
    in >> a >> b;

    in.close();
    return pair<long long, int>(a, b);
}



long long solve(pair<long long, int> p) {
    long long base = p.first;
    int exp = p.second;

    if (exp == 0)
        return 1;
    if (exp == 1)
        return base % 1999999973;
    if (exp == 2)
        return base * base % 1999999973;

    if (exp % 2 == 0)
        return solve(pair<long long, int>(base * base, exp / 2)) % 1999999973;
    else
        return base * solve(pair<long long, int>(base * base, exp / 2)) % 1999999973;
}

void print(long long n) {
    ofstream out(OUTPUT);

    out << n % 1999999973;

    out.close();
}

int main() {
    auto nums = read();
    auto res = solve(nums);
    print(res);

    return 0;
}