Add (slow) Haskell solution for Problem 23
This commit is contained in:
parent
cb781fe33f
commit
ce795cfe27
29
Haskell/p023.hs
Normal file
29
Haskell/p023.hs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
-- 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 ProjectEuler (sumProperDivisors)
|
||||||
|
|
||||||
|
isAbundant :: (Integral a) => a -> Bool
|
||||||
|
isAbundant n = sumProperDivisors n > n
|
||||||
|
|
||||||
|
abundantSums :: (Integral a) => [a]
|
||||||
|
abundantSums = nub [ 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)
|
Loading…
x
Reference in New Issue
Block a user