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
|