Didaxis
lecție · Informatică

Exponențiere rapidă

Calculul unei puteri prin înjumătățirea repetată a exponentului.

Se face în:
Clasa a IX-a
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 2 · rezumatul lecției

Pe scurt

Exponențierea rapidă calculează pentru exponent întreg nenegativ prin înjumătățirea repetată a exponentului. Dacă este par, ; dacă este impar, păstrăm încă un factor . Astfel, se obține din factori corespunzători cifrelor 1 din scrierea lui 5 în baza 2 (): , nu prin cinci înmulțiri consecutive obligatorii.

Desen la lecția „Exponențiere rapidă”
2în detaliustratul 2 din 2 · pentru clasă și Bacalaureat

În detaliu

Calculul lui prin înmulțiri consecutive necesită un număr de pași proporțional cu . Exponențierea rapidă se bazează pe scrierea exponentului în baza 2. Dacă sunt cifrele lui binare, atunci . Puterile se obțin prin pătrățiri succesive, iar la fiecare pas se verifică ultima cifră binară a exponentului, adică exp % 2. Ciclul are iterații: pentru sunt doar 60.

Metoda se potrivește calculului cu numere mari și testelor pe șiruri de puteri. Pentru se fac 5 iterații în loc de 29 de înmulțiri.

Invarianta ciclului este: este egal cu la începutul fiecărei iterații. La început rezultat=1, baza=a, exp=n. Dacă exp este impar, factorul baza trece în rezultat; apoi baza se pătrățește și exp se înjumătățește (împărțire întreagă). Când exp devine 0, rezultat este .

Exemplul 1 — . Exponentul are ultima cifră 1, apoi 0, apoi 1.

  1. exp=5 (impar): rezultat=1·3=3; baza=3²=9; exp=2.
  2. exp=2 (par): rezultat rămâne 3; baza=9²=81; exp=1.
  3. exp=1 (impar): rezultat=3·81=243; baza=81²=6561; exp=0.

Ciclul se oprește cu rezultat=243, adică . S-au făcut trei iterații în loc de patru înmulțiri consecutive.

baza = 3
exp = 5
rezultat = 1
while exp > 0:
    if exp % 2 == 1:
        rezultat *= baza
    baza *= baza
    exp //= 2
print(rezultat)

Pentru ciclul face patru iterații și numai două înmulțiri ale rezultatului, la cifrele 1 de pe pozițiile 1 și 3: . Pentru înmulțirile consecutive cer 39 de pași, pe când cere șase iterații și numai două înmulțiri ale rezultatului, cu și cu . Aceeași idee se scrie și recursiv: pentru par, pentru impar și ; ambele variante au același număr de pași, dar cea iterativă nu folosește stiva de apeluri.

Exemplul 2 — puterea modulo . La exponenți mari rezultatul depășește orice tip întreg, iar problemele cer restul. Se aplică restul după fiecare înmulțire, pentru că . Pentru , exponentul are trei cifre 1:

#include <iostream>
using namespace std;
int main() {
    long long baza = 3, exp = 13, mod = 100, rezultat = 1;
    while (exp > 0) {
        if (exp % 2 == 1)
            rezultat = rezultat * baza % mod;
        baza = baza * baza % mod;
        exp /= 2;
    }
    cout << rezultat;
    return 0;
}

Programul afișează 23, deoarece și restul împărțirii la 100 este 23. Valorile lui baza modulo 100 sunt 3, 9, 81, 61, iar factorii aleși sunt 3, 81 și 61 (exponenții 1, 4 și 8 ai lui 3 în ): și . Se folosește long long pentru ca produsul a două resturi mai mici decât să încapă în tip.

Exemplul 3 — și cazul . Exponentul are două cifre 0 la sfârșit, deci primele două iterații nu schimbă rezultat: la exp=12 și exp=6 baza devine 49, apoi 2401. La exp=3 (impar) rezultat=2401, iar baza devine . La exp=1 rezultatul este , adică . Valoarea depășește 2147483647, deci variabilele sunt long long. Pentru ciclul nu se execută și rămâne rezultat=1, valoare corectă pentru .

Atenție la ultima pătrățire. În ultima iterație baza se pătrățește chiar dacă valoarea nu mai este folosită; pentru ea ajunge la 33 232 930 569 601, încă în long long. La baze mari fără modul, această pătrățire inutilă poate depăși tipul înaintea rezultatului, deci se verifică limitele din enunț.

Greșeli frecvente

  • Greșit: la exponent par se mai înmulțește rezultatul cu baza.
    Corect: acel factor se adaugă numai când exponentul este impar.
  • Greșit: baza *= baza este o adunare.
    Corect: pătrățește baza.
  • Greșit: pentru exponentul zero rezultatul este zero.
    Corect: pentru .
în contul tăuPremium

Testează-te pe această lecție

Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.

Înainte și după

Surse și referințe

Redactare proprie, conform programei:

  • OMEC 4370/2026, anexa 8, Informatică IX intensiv, p. 155–156
  • OMEC 6930/2025, anexa 66, Informatică IX CS militar, Monitorul Oficial nr. 4 bis/8.01.2026, pp. 2563–2578; cdn.edupedu.ro; centralizator oficial actualizat prin OMEC 3224/2026, legislatie.just.ro

Documente consultate

  • Programa școlară de informatică, clasa a IX-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
  • Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42), p. 1653–1654; rocnee.eu
  • Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației; edu.ro
  • Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro

Desene: Redactare proprie (desen original)

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.