Cut the search space for problem 23 in half.
This commit is contained in:
parent
548515a626
commit
797600c709
22
Problem23.hs
22
Problem23.hs
|
|
@ -1,4 +1,22 @@
|
||||||
import Data.List
|
-- 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.Maybe
|
import Data.Maybe
|
||||||
import Euler
|
import Euler
|
||||||
|
|
||||||
|
|
@ -9,6 +27,6 @@ abundant :: [Int]
|
||||||
abundant = filter isAbundant [1..]
|
abundant = filter isAbundant [1..]
|
||||||
|
|
||||||
abundantPair :: Int -> Maybe (Int, Int)
|
abundantPair :: Int -> Maybe (Int, Int)
|
||||||
abundantPair n = listToMaybe [ (p,q) | p <- takeWhile (<n) abundant, let q = n - p, isAbundant q ]
|
abundantPair n = listToMaybe [ (p,q) | p <- takeWhile (<= (n `div` 2)) abundant, let q = n - p, isAbundant q ]
|
||||||
|
|
||||||
main = print $ sum $ filter (isNothing . abundantPair) [1..28123]
|
main = print $ sum $ filter (isNothing . abundantPair) [1..28123]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue