Ridicare la putere prin înmulțiri repetate

Bază~13 min13 pași

De ce contează?

Dacă îndoi o foaie de hârtie de 1 mm de 10 ori, obții aproape 1 metru. De 42 de ori — ajungi la Lună. Puterile cresc exponențial și depășesc rapid orice limită practică. De aceea, calculul corect al puterii — și gestionarea overflow-ului — este esențial în algoritmică.

Algoritmul simplu

baza^exp = baza × baza × ... × baza, de exp ori. Urmărește pentru 2^5:

rezultat = 1
i=1: rezultat = 1 × 2 = 2
i=2: rezultat = 2 × 2 = 4
i=3: rezultat = 4 × 2 = 8
i=4: rezultat = 8 × 2 = 16
i=5: rezultat = 16 × 2 = 32
Rezultat: 32

Implementare C++

#include <iostream>
using namespace std;

int main() {
    long long baza;
    int exp;
    cin >> baza >> exp;

    long long rezultat = 1;
    for (int i = 1; i <= exp; i++) {
        rezultat *= baza;
    }

    cout << baza << "^" << exp << " = " << rezultat << endl;
    return 0;
}

Exemple:

  • Input 2 102^10 = 1024
  • Input 3 53^5 = 243
  • Input 5 05^0 = 1

Cazuri speciale

// baza^0 = 1 (bucla nu ruleaza, rezultat = 1 -- corect)
// 0^exp  = 0 pentru exp > 0 (1 * 0 * 0 * ... = 0 -- corect)
// 0^0    = 1 prin conventie in C++
Observația-cheie

Algoritmul de față este O(exp) — liniar în exponent. Pentru exp = 10⁹ este prea lent. La clasa a 7-a vei studia exponențierea rapidă (O(log exp)), care calculează puterea în câteva înmulțiri prin pătrat repetat.

Complexitate

CazTimpSpațiu
Înmulțiri repetateO(exp)O(1)
Greșeli frecvente

Greșeala 1: Inițializezi rezultat = 0 în loc de rezultat = 1. Produsul pornit de la 0 rămâne 0, indiferent de câte înmulțiri faci.

Greșeala 2: Overflow neobservat. int nu ține puteri mari — 2^31 depășește int. Folosește long long și ține cont că și el are limite (~9.2 × 10¹⁸).

Greșeala 3: Scrii baza * exp (înmulțire directă) în loc să ridici la putere. 2 * 10 = 20 ≠ 2^10 = 1024. Ridicarea la putere cere o buclă cu exp pași, nu o înmulțire simplă.

Greșeala 4: Inițializezi rezultat = baza și pornești bucla de la i = 2. Corect pentru exp ≥ 1, dar greșit pentru exp = 0 — obții baza în loc de 1. Forma sigură: rezultat = 1, buclă de la i = 1.

Întrebarea 1 / 3

2^10 = ?