Algoritmii de exponențiere rapidă ( algoritm de exponențiere dihotomică , algoritm de exponențiere binară) sunt algoritmi menționați să ridice un număr la o putere naturală în mai puține înmulțiri decât este necesar în determinarea gradului [1] . Algoritmii se bazează pe faptul că, pentru a ridica un număr la o putere , nu este necesar să înmulțiți numărul cu el însuși o dată, dar puteți înmulți puterile deja calculate. În special, dacă puterea a doi, atunci pentru ridicarea la o putere este suficient să pătrați numărul de ori, în timp ce cheltuiți înmulțiri în loc de . De exemplu, pentru a ridica un număr la puterea a opta, în loc să efectuați șapte înmulțiri , puteți pătra numărul ( ), apoi puteți pătra din nou rezultatul pentru a obține a patra putere ( ) și, în cele din urmă, puteți pătra din nou rezultatul și obțineți răspunsul ( ).
În plus, unii algoritmi pentru optimizarea ulterioară folosesc faptul că operația de pătrare este mai rapidă decât operația de înmulțire datorită faptului că cifrele din factor se repetă la pătrat [2] .
Algoritmul de exponențiere binară a fost propus pentru prima dată în secolul al XV-lea de către matematicianul persan Al-Kashi [3] .
Acești algoritmi nu sunt întotdeauna optimi. De exemplu, atunci când se folosește schema de la stânga la dreapta, exponențiarea rapidă a n = 15 va necesita trei înmulțiri și trei operații de pătrare, deși ridicarea la puterea a 15-a poate fi efectuată în 3 înmulțiri și 2 pătrat [4] . Exponentiația optimă corespunde construcției celui mai scurt lanț de aditivi .
Algoritmul principal pentru exponențierea rapidă este schema „de la stânga la dreapta”. Își trage numele de la faptul că biții exponentului sunt priviți de la stânga la dreapta, adică de la sus la jos [5] .
Lăsa
este o reprezentare binară a gradului n , adicăunde . Apoi
[5] .Secvența de acțiuni la utilizarea acestei scheme poate fi descrisă după cum urmează:
Astfel, algoritmul de exponențiere rapidă se reduce la un analog multiplicativ al schemei lui Horner [6] :
Fie perechea ( S , *) un semigrup , atunci putem numi operația * înmulțire și definim operația de ridicare la o putere naturală:
Apoi, pentru a calcula valorile unui n în orice semigrup (în special, într- un grup abelian ), se pot folosi algoritmi de exponențiere rapidă [8] .
Aplicând algoritmul, calculăm 21 13 :
În această schemă, spre deosebire de schema „de la stânga la dreapta”, biții exponentului sunt priviți de la cel mai mic la cel mai mare [5] .
Secvența de acțiuni în implementarea acestui algoritm.
Acest circuit conține tot atâtea înmulțiri și pătrate cât circuitul „de la stânga la dreapta”. Cu toate acestea, în ciuda acestui fapt, schema de la stânga la dreapta este mai profitabilă decât schema de la dreapta la stânga, mai ales dacă exponentul conține multe unități. Ideea este că în schemă, de la stânga la dreapta, rezultatul operației = rezultat · x conține un multiplicator constant x . Și pentru x mic (ceea ce este adesea cazul în testele de primalitate), înmulțirea va fi rapidă. De exemplu, pentru x = 2 putem înlocui operația de înmulțire cu operația de adunare [7] .
Justificarea matematică a funcționării acestui algoritm poate fi reprezentată prin următoarea formulă:
[9] .Exemplu . Să calculăm valoarea 21 13 folosind schema de exponențiere de la dreapta la stânga .
i | 0 | unu | 2 | 3 |
---|---|---|---|---|
21 | 441 | 194 481 | 37 822 859 361 | |
unu | 0 | unu | unu |
Atât pentru schemele de la stânga la dreapta, cât și de la dreapta la stânga, numărul de operații la pătrat este același și este egal cu k, unde k este lungimea exponentului n în biți, . Numărul de operații de înmulțire necesare este egal cu greutatea Hamming , adică numărul de elemente nenule din reprezentarea binară a numărului n . În medie, sunt necesare operații de înmulțire [6] .
De exemplu, pentru a ridica un număr la puterea a suta, acest algoritm va necesita doar 8 operații de înmulțire și pătrare [5] .
Pentru comparație, cu metoda standard de exponențiere, este necesară o operație de înmulțire, adică numărul de operații poate fi estimat ca [10] .
În general, operația de pătrare este mai rapidă decât operația de înmulțire. Metoda ferestrei vă permite să reduceți numărul de operații de înmulțire și, prin urmare, să faceți algoritmul de exponențiere mai optim [8] .
Fereastra este de fapt baza sistemului numeric [7] . Fie w lățimea ferestrei, adică w caracterele indicatorului sunt luate în considerare la un moment dat.
Luați în considerare metoda ferestrei.
Acest algoritm necesită k pătrat, dar numărul de înmulțiri este redus la k/w în medie [8] .
Și mai eficientă este metoda ferestrei glisante. Constă în faptul că lățimea ferestrei în timpul execuției procesului se poate modifica:
Numărul de operații de exponențiere din acest algoritm este același ca în metoda ferestrei, dar numărul de operații de înmulțire a fost redus la l , adică la media [8] .
De exemplu, să ridicăm numărul x la puterea lui 215 folosind metoda ferestrei glisante . Lățimea ferestrei este w = 3.
Algoritmul de exponențiere rapidă a devenit larg răspândit în criptosistemele cu cheie publică . În special, algoritmul este utilizat în protocolul RSA , schema ElGamal și alți algoritmi criptografici [11] .