Modular exponentiation: Difference between revisions
→{{header|Haskell}}: Added mod=1 case and improved readability by moving final expression into the pattern match and introducing where variables
(Frink) |
(→{{header|Haskell}}: Added mod=1 case and improved readability by moving final expression into the pattern match and introducing where variables) |
||
Line 876:
=={{header|Haskell}}==
<lang haskell>
powm b 0 m r = r▼
| e `mod` 2 == 1 = powm (b * b `mod` m) (e `div` 2) m (r * b `mod` m)▼
modPow b e m r
| otherwise = modPow b' e' m r
where
b' = b * b `mod` m
e' = e `div` 2
main
print (modPow 2988348162058574136915891421498819466320163312926952423791023078876139▼
▲ 2988348162058574136915891421498819466320163312926952423791023078876139
2351399303373464486466122544523690094744975233415544072992656881240319
(10 ^ 40)
1
</lang>
{{out}}
<pre>1527229998585248450016808958343740453059</pre>
|