Algorytm szybkiego potęgowania
Algorytm szybkiego potęgowania – metoda pozwalająca na szybkie obliczenie potęgi o wykładniku naturalnym. Metoda ta wykorzystuje pośrednio dwójkową reprezentację wykładnika potęgi, a jej złożoność, wyrażona jako liczba wykonywanych mnożeń, wynosi
, gdzie n oznacza wykładnik obliczanej potęgi.
Szybkie podnoszenie do potęgi w praktyce stosuje się do liczenia reszty z dzielenia potęgi przez ustaloną liczbę. Używa się go np. w algorytmach szyfru RSA.
Wprowadzenie [edytuj]
Potęgowanie definiuje się za pomocą mnożenia
,
co daje łącznie
mnożeń.
Dla dużego
liczba wymaganych operacji może być bardzo duża. Jeśli
ma
cyfr, liczba operacji byłaby wykładnicza wobec
.
Algorytm [edytuj]
Algorytm szybkiego potęgowania jest konsekwencją obserwacji, że aby obliczyć wartość
wystarczy znać
(
oznacza część całkowitą), a następnie wykonać jedno lub dwa mnożenia. Np. aby obliczyć
wystarczy znać wartość
, a następnie policzyć
i wynik wynosi
. W ten sposób aby przejść od
do
wystarczy wykonać 2 mnożenia zamiast 88, jak wynikałoby to z przytoczonej wyżej definicji.
Pseudokod [edytuj]
Dostajemy z powyższej obserwacji rekurencyjną funkcję szybkiego obliczania wartości
.
funkcja potęga(x, n)
jeżeli n = 0
zwróć 1
jeżeli n jest nieparzysta
zwróć x · potęga(x, n - 1)
w przeciwnym przypadku
a = potęga(x, n/2)
zwróć a2
Ten sam algorytm w wersji iteracyjnej wygląda następująco:
- w:=1
- dla wszystkich cyfr rozwinięcia dwójkowego liczby n zaczynając od najbardziej znaczącej:
-
- jeśli cyfra jest zerem to w:=w*w
- jeśli cyfra jest jedynką to w:=w*w*x
po zakończeniu powyższego algorytmu w zmiennej w jest pamiętana n-ta potęga liczby x.
,