Cod sursa(job #3364324)

Utilizator and_Turcu Andrei and_ Data 1 septembrie 2026 17:54:15
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MOD = 1999999973;

int inmultire(int x, int y)
{
    return (1LL * x * y) % MOD;
}


/////  return baza ^ exp
//int ExponetiereRapida(int baza, int exp)
//{
//    if(exp == 1)
//        return baza;
//
//    if(exp % 2 == 0)
//    {
//        int aux = ExponetiereRapida(baza, exp / 2);
//        return aux * aux;
//    }
//    else
//        return baza * ExponetiereRapida(baza, exp - 1);
//}

///  return baza ^ exp
int ExponetiereRapida(int baza, int exp)
{
    if(exp == 1)
        return baza;

    if(exp % 2 == 0)
    {
        int aux = ExponetiereRapida(baza, exp / 2);
        return inmultire(aux, aux);
    }
    else
        return inmultire(ExponetiereRapida(baza, exp - 1), baza);
}




int main()
{
    int x, p;

    fin >> x >> p;

    int raspuns = 1;

/*

/// Solutia Bruta: Complexitate: O(P)
    for(int i = 1; i <= p; i++)
        raspuns = 1LL * (1LL * raspuns * x) % MOD;

    fout << raspuns;

*/

/// Exponentiere rapida: Complexitate O(log N)

/// Versiune recursiva

    fout << ExponetiereRapida(x, p);

    return 0;
}