Cod sursa(job #2700196)

Utilizator Maria-BorcaBorca Maria Maria-Borca Data 26 ianuarie 2021 19:31:49
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <cstring>
#include <cmath>
#include <fstream>

using namespace std;
ifstream fin("lgput.in");
ofstream fout("lgput.out");

const int MOD = 1999999973;


int lg_pow(int n, int p) {
    if (p == 0)
        return 1;
    if (p % 2 != 0)
        return n * lg_pow(n, p - 1);
    int rez = lg_pow(n, p / 2);
    return rez * rez;
}

int lg_pow_mod(int n, int p) {
    if (p == 0)
        return 1;
    if (p % 2 != 0)
        return ((n % MOD) * (lg_pow(n, p - 1) % MOD)) % MOD;
    int rez = lg_pow(n, p / 2) % MOD;
    return (rez * rez) % MOD;
}

int normal_pow_mod(int n, int p) {
    int rez = 1;
    for (int i = 1; i <= p; i++)
        rez = (rez * n) % MOD;
    return rez;
}

int main() {
    int n, p;
    fin >> n >> p;
    fout << normal_pow_mod(n, p);
    return 0;
}