Modular exponentiation: Difference between revisions
Content deleted Content added
m →{{header|REXX}}: added/changed whitespace and comments, optimized the function, simplified the function code, added wording in the REXX section header and the output section header. |
m →version 1: changed code to process with the minimum task's requirements (40 decimal digits). |
||
Line 1,236: | Line 1,236: | ||
powerMod: procedure; parse arg x,p,mm /*fast modular exponentiation code*/ |
powerMod: procedure; parse arg x,p,mm /*fast modular exponentiation code*/ |
||
parse value max(x*x, p, mm)'E0' with "E" e /*obtain the biggest of the three.*/ |
parse value max(x*x, p, mm)'E0' with "E" e /*obtain the biggest of the three.*/ |
||
numeric digits max( |
numeric digits max(40, e+e) /*ensure big enough to handle A².*/ |
||
$= 1 /*use this for the first value. */ |
$= 1 /*use this for the first value. */ |
||
do until p==0 /*perform until P is equal to zero*/ |
do until p==0 /*perform until P is equal to zero*/ |
||
Line 1,248: | Line 1,248: | ||
{{out|output|text= when using the inputs of: <tt> , , 40 80 180 888 </tt>}} |
{{out|output|text= when using the inputs of: <tt> , , 40 80 180 888 </tt>}} |
||
<pre> |
<pre> |
||
a= 2988348162058574136915891421498819466320163312926952423791023078876139 (70 digits) |
a= 2988348162058574136915891421498819466320163312926952423791023078876139 (70 digits) |
||
b= 2351399303373464486466122544523690094744975233415544072992656881240319 (70 digits) |
b= 2351399303373464486466122544523690094744975233415544072992656881240319 (70 digits) |
||
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ |
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ |
||
a**b (mod 10**40)= 1527229998585248450016808958343740453059 |
a**b (mod 10**40)= 1527229998585248450016808958343740453059 |
||
Line 1,259: | Line 1,259: | ||
a**b (mod 10**888)= 261284964380836515397030706363442226571397237057488951313684545241085642329943676248755716124260447188788530017182951051652748425560733974835944416069466176713156182727448301838517000343485327001656948285381173038339073779331230132340669899896448938858785362771190460312412579875349871655999446205426049662261450633448468931573506876255644749155348923523680730999869785472779116009356696816952771965930728940530517799329942590114178284009260298426735086579254282591289756840358811 |
a**b (mod 10**888)= 261284964380836515397030706363442226571397237057488951313684545241085642329943676248755716124260447188788530017182951051652748425560733974835944416069466176713156182727448301838517000343485327001656948285381173038339073779331230132340669899896448938858785362771190460312412579875349871655999446205426049662261450633448468931573506876255644749155348923523680730999869785472779116009356696816952771965930728940530517799329942590114178284009260298426735086579254282591289756840358811 |
||
822151307479352856856983393715348870715239020037962938019847992960978849852850613063177471175191444262586321233906926671000476591123695550566585083205841790404069511972417770392822283604206143472509425391114072344402850867571806031857295076204937005344367438778481743660325586328069392203762862423884839076695547212682454523811053259517041910225328867076245698908287781527229998585248450016808958343740453059 |
822151307479352856856983393715348870715239020037962938019847992960978849852850613063177471175191444262586321233906926671000476591123695550566585083205841790404069511972417770392822283604206143472509425391114072344402850867571806031857295076204937005344367438778481743660325586328069392203762862423884839076695547212682454523811053259517041910225328867076245698908287781527229998585248450016808958343740453059 |
||
and took 5.97 seconds. |
|||
</pre> |
</pre> |
||