euler/Problem23.hs

15 lines
378 B
Haskell

import Data.List
import Data.Maybe
import Euler
isAbundant :: Int -> Bool
isAbundant n = sum (properDivisors n) > n
abundant :: [Int]
abundant = filter isAbundant [1..]
abundantPair :: Int -> Maybe (Int, Int)
abundantPair n = listToMaybe [ (p,q) | p <- takeWhile (<n) abundant, let q = n - p, isAbundant q ]
main = print $ sum $ filter (isNothing . abundantPair) [1..28123]