-- A perfect number is a number for which the sum of its proper divisors is exactly equal to the number. -- For example, the sum of the proper divisors of 28 would be 1 + 2 + 4 + 7 + 14 = 28, which means that 28 is a perfect number. -- -- A number n is called deficient if the sum of its proper divisors is less than n and it is called abundant if this sum exceeds n. -- -- As 12 is the smallest abundant number, 1 + 2 + 3 + 4 + 6 = 16, the smallest number that can be written as the sum of two abundant numbers is 24. -- By mathematical analysis, it can be shown that all integers greater than 28123 can be written as the sum of two abundant numbers. -- However, this upper limit cannot be reduced any further by analysis even though it is known that the greatest number that cannot be expressed -- as the sum of two abundant numbers is less than this limit. -- -- Find the sum of all the positive integers which cannot be written as the sum of two abundant numbers. import Data.List import qualified Data.Set as Set import ProjectEuler (sumProperDivisors) isAbundant :: (Integral a) => a -> Bool isAbundant n = sumProperDivisors n > n abundantSums :: (Integral a) => [a] abundantSums = Set.toList $ Set.fromList [ x + y | x <- abundantList, y <- abundantList, x + y <= 28123, y >= x ] where abundantList = [ x | x <- [12..28123], isAbundant x ] sumNotAbundant :: (Integral a) => a sumNotAbundant = sum $ [1..28123] \\ abundantSums main = do let result = sumNotAbundant putStrLn $ "Project Euler, Problem 23\n" ++ "Answer: " ++ show result