module Haskus.Utils.Maths
   ( gcds
   , lcms
   )
where

-- | Return the GCD of a list of integrals
--
-- >>> gcds [2,4,8]
-- 2
gcds :: Integral a => [a] -> a
gcds []     = 1
gcds [0]    = 1
gcds [x]    = x
gcds (x:xs) = foldr gcd x xs

-- | Return the LCM of a list of integrals
--
-- >>> lcms [2,3,5]
-- 30
lcms :: Integral a => [a] -> a
lcms []     = 0
lcms [x]    = x
lcms (x:xs) = foldr lcm x xs