From ce795cfe27e2552568aa2cc33d5f6dc251b9a0d5 Mon Sep 17 00:00:00 2001 From: Daniele Fucini Date: Sun, 10 Nov 2024 20:41:05 +0100 Subject: [PATCH] Add (slow) Haskell solution for Problem 23 --- Haskell/p023.hs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Haskell/p023.hs diff --git a/Haskell/p023.hs b/Haskell/p023.hs new file mode 100644 index 0000000..c5ffb72 --- /dev/null +++ b/Haskell/p023.hs @@ -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)