Square-And-Multiply-Methode zum Potenzieren
Eine Methode um schnell
admodn
zu berechnen.
Diese Methode lässt sich rekursiv definieren als:
c0=amodn
ci+1=ci2modn
d0=d
di+1=⌊2di⌋
δi=dimod2
b0=aδ0modn
bi+1=bici+1δi+1modn
Ist di≤1, so ist bi=admodn.
Die Laufzeit ist durch die Größe von d beschränkt. In jeder Iteration wird di halbiert.
Wir berechnen also schnell, dass wir nur
l=⌊log2d⌋<3.33log10d
Schleifenwiederholungen brauchen.
Wir müssen also l mal ein Quadrat bilden und höchstens l Multiplikationen durchführen.
Die Laufzeit lässt sich also mit O((logn)3) abschätzen.
Variante 2
In der zweiten Variante versuchen wir den Exponenten stückweise kleiner zu machen. Dabei müssen wir dann immer nur kleine Potenzen berechnen, da die Modulo Operation die Zahlen immer kleiner gleich n hält.
Wir verwenden also einmal für gerades d
b⋅cd≡b⋅(c2modn)2dmodn
und für ungeraded d
b⋅cd≡(bcmodn)⋅cd−1modn.
Algorithmisch lässt sich auch dieses Verfahren rekursiv definieren, mit:
b0=1,c0=amodn,do=d.
Wenn di=0, dan ist bi=admodn.
Für di>0 und di gerade:
bi+1=bi,ci+1=ci2modn,di+1=2di.
Für di>0 und di ungerade:
bi+1=bicimodn,ci+1=ci,di+1=di−1.
#code paste here
Variante 3
#code paste here