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