Schnelles Potenzieren Mathematik für Informatiker IV, SS 2003

Werbung
Schnelles Potenzieren
Mathematik für Informatiker IV, SS 2003
Seien a und m positive ganze Zahlen. Wir wollen
am
schnell berechnen. Eine gängige Methode ist das sogenannte square and multiply. Es
funktioniert wie folgt:
(1) Berechne die Binärdarstellung von m:
m = m0 + m1 · 2 + m2 · 22 + · · · + mr · 2r .
Dabei ist r + 1 die Anzahl Bit von m und die mi leben in {0, 1}.
(2) Die Zahl m lässt sich wie folgt berechnen:
2 · mr + mr−1 ,
2 · (2 · mr + mr−1 ) + mr−2 ,
······
2 · (· · · 2 · (2 · (2 · mr + mr−1 ) + mr−2 ) + mr−3 · · · ) + m0 = m.
Das heisst: Multipliziere in jedem Schritt mit 2 und addiere eine 0 oder 1 hinzu,
je nachdem was mi gerade ist.
(3) Nehmen wir am statt m, so wird aus multiplikation mit 2 ein Quadrieren (a2k =
(ak )2 ) und aus der Addition wird eine Multiplikation (ak+` = ak a` ). Aus obiger
Formel wird dann:
(· · · (((amr )2 · amr−1 )2 · amr−2 )2 · amr−3 · · · )2 · am0 = am .
Also: In jedem Schritt quadriere das Zwischenergebnis und multipliziere anschliessend mit 1 oder a, je nachdem was mi sagt.
(4) Als Algorithmus sieht das folgendermassen aus:
x := a
for i from r − 1 to 0 do
x := x2
if mi = 1 then x := x ∗ a
return x
i
(5) Alternativ, und eventuell einfacher: Berechne zuerst alle Potenzen ai := a2
für 0 ≤ i ≤ r und multipliziere diejenigen ai zusammen, für die mi = 1 gilt. Dies
folgt aus der Beobachtung
am = am0 +m1 ·2+m2 ·2
2 +···+m ·2r
r
r
r
= am0 · (am1 )2 · · · (amr )2 = am0 · (a2 )m1 · · · (a2 )mr
und eben der Tatsache, dass a0 = 1.
Beispiel
Wollen 319 in F23 ausrechnen. Die Binärdarstellung von 19 ist
(m4 , m3 , m2 , m1 , m0 ) = (1, 0, 0, 1, 1).
Der Algorithmus liefert:
(((32 )2 )2 · 3)2 · 3 ≡ 6 (mod 23).
Alternativ berechnet man 3, 32 , 34 = (32 )2 , 38 = (34 )2 , 316 = (38 )2 und setzt 319 = 316 ·32 ·3.
Insgesamt also nur 6 Operationen. Beachte, daß es sinnvol ist, nach jedem Rechenschritt
modulo 23 zu reduzieren.
Herunterladen