Cod sursa(job #2062852)

Utilizator preda.andreiPreda Andrei preda.andrei Data 10 noiembrie 2017 21:36:06
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <cstdint>
#include <fstream>

using namespace std;

constexpr uint32_t kMod = 1999999973;

uint32_t RaiseMod(uint32_t base, uint32_t exp, uint32_t mod = kMod)
{
  if (exp == 0) {
    return 1;
  } else if (exp == 1) {
    return base % mod;
  }

  if (exp % 2 == 0) {
    auto root = RaiseMod(base, exp / 2, mod);
    return (1LL * root * root) % mod;
  }
  return 1LL * base * RaiseMod(base, exp - 1, mod) % mod;
}

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

  uint32_t base, exponent;
  fin >> base >> exponent;

  auto res = RaiseMod(base, exponent);
  fout << res << "\n";

  return 0;
}