module ModularExponentiation where slowExM :: Integer -> Integer -> Integer -> Integer slowExM x e m = (x ^ e) `mod` m exM :: Integer -> Integer -> Integer -> Integer exM x e m = let exM' c e' = if e' < e then exM' c' (e'+1) else c' where c' = (x * c) `mod` m in exM' 1 1