RosettaCodeData/Task/Modular-exponentiation/Haskell/modular-exponentiation.hs

15 lines
423 B
Haskell
Raw Permalink Normal View History

2013-10-27 22:24:23 +00:00
powm :: Integer -> Integer -> Integer -> Integer -> Integer
powm b 0 m r = r
2017-09-23 10:01:46 +02:00
powm b e m r
| e `mod` 2 == 1 = powm (b * b `mod` m) (e `div` 2) m (r * b `mod` m)
2013-10-27 22:24:23 +00:00
powm b e m r = powm (b * b `mod` m) (e `div` 2) m r
2013-04-10 21:29:02 -07:00
main :: IO ()
2017-09-23 10:01:46 +02:00
main =
print $
2013-10-27 22:24:23 +00:00
powm
2988348162058574136915891421498819466320163312926952423791023078876139
2351399303373464486466122544523690094744975233415544072992656881240319
(10 ^ 40)
1