Template:Prelude/pow mod.a68: Difference between revisions
Content added Content deleted
m (Template:Preclude/pow mod.a68 moved to Template:Prelude/pow mod.a68: rename clude to lude) |
m (Template template) |
||
(2 intermediate revisions by one other user not shown) | |||
Line 4: | Line 4: | ||
USAGE |
USAGE |
||
MODE POWMODSTRUCT = INT, LONG INT, COMPL, FRAC, MODULAS, MATRIX etc |
MODE POWMODSTRUCT = INT, LONG INT, COMPL, FRAC, MODULAS, MATRIX etc |
||
PR READ " |
PR READ "prelude/pow_mod.a68" PR |
||
END COMMENT |
END COMMENT |
||
Line 12: | Line 12: | ||
e:=e OVER 2; |
e:=e OVER 2; |
||
WHILE e /= 0 DO |
WHILE e /= 0 DO |
||
sq |
sq := sq * sq %* mod; |
||
IF ODD e THEN out := out * sq %* mod FI ; |
IF ODD e THEN out := out * sq %* mod FI ; |
||
e:=e OVER 2 |
e:=e OVER 2 |
||
Line 18: | Line 18: | ||
out |
out |
||
) |
) |
||
<noinclude>{{template}}</noinclude> |
Latest revision as of 15:40, 11 October 2010
COMMENT This routine is used in more than one place, and is essentially a template that can by used for many different types, eg INT, LONG INT... USAGE MODE POWMODSTRUCT = INT, LONG INT, COMPL, FRAC, MODULAS, MATRIX etc PR READ "prelude/pow_mod.a68" PR END COMMENT
PROC pow mod = (POWMODSTRUCT b,in e, mod)POWMODSTRUCT: ( POWMODSTRUCT sq := b, e := in e; POWMODSTRUCT out:= IF ODD e THEN b ELSE 1 FI; e:=e OVER 2; WHILE e /= 0 DO sq := sq * sq %* mod; IF ODD e THEN out := out * sq %* mod FI ; e:=e OVER 2 OD; out )