Cod sursa(job #2963549)

Utilizator popardaandrei3490Popirda Andrei-Eusebiu popardaandrei3490 Data 11 ianuarie 2023 14:31:09
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.56 kb
#include <iostream>

#define MOD 1999999973
#define ull unsigned long long

using namespace std;

// power(N, 8) = power(N, 4) * power(N, 4)
ull power(ull N, ull P) {
    if(P == 1)
        return N;
    if(P == 0)
        return 1;

    ull s = power(N, P / 2);
    s = (s % MOD) * (s % MOD) % MOD;
    if(P % 2 != 0)
        s = (s % MOD) * (N % MOD) % MOD;

    return s;
}

int main()
{
    freopen("lgput.in", "r", stdin);
    freopen("lgput.out", "w", stdout);

    ull N, P;

    cin >> N >> P;
    cout << power(N, P);
    return 0;
}