Montgomery reduction: Difference between revisions

Content added Content deleted
(→‎{{header|Quackery}}: multiple improvements)
(→‎{{header|Quackery}}: tidied up code layout)
Line 1,480: Line 1,480:
<code>**mod</code> is defined at [[Modular exponentiation#Quackery]].
<code>**mod</code> is defined at [[Modular exponentiation#Quackery]].


<syntaxhighlight lang="Quackery"> [ 0 swap [ dup while dip 1+ 1 >> again ] drop ] is bits ( n --> n )
<syntaxhighlight lang="Quackery"> [ 0 swap [ dup while dip 1+ 1 >> again ] drop ] is bits ( n --> n )


[ 1 & ] is odd ( n --> b )
[ 1 & ] is odd ( n --> b )


[ over bits times [ dup odd if [ over + ] 1 >> ] swap mod ] is monred ( n n --> n )
[ over bits times [ dup odd if [ over + ] 1 >> ] swap mod ] is monred ( n n --> n )


[ 750791094644726559640638407699 ] is m ( --> n )
[ 750791094644726559640638407699 ] is m ( --> n )
Line 1,515: Line 1,515:
cr
cr
say "Montgomery computation of x1^x2 mod m: " x1 x2 m **mon echo cr
say "Montgomery computation of x1^x2 mod m: " x1 x2 m **mon echo cr
say "Modular exponentiation of x1^x2 mod m: " x1 x2 m **mod echo cr
say "Modular exponentiation of x1^x2 mod m: " x1 x2 m **mod echo cr</syntaxhighlight>
</syntaxhighlight>


{{out}}
{{out}}