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.