DEV Community

Discussion on: Write a script to find "Perfect Numbers"

Collapse
 
albxncom profile image
albxn • Edited

Well, here goes my Haskell version. Enjoy!

perfectNumber :: Int -> Bool
perfectNumber i = 
    sum (divisorsList i) == i

perfectNumbers :: Int -> [Int]
perfectNumbers n =
    take n [ x | x <- [1..], perfectNumber x ]

divisorsList :: Int -> [Int]
divisorsList i = 
    [ x | x <- [1..(i-1)], i `mod` x == 0]

main = do
    print(perfectNumbers 5) -- prints the first 5 perfect numbers..
Collapse
 
antonrich profile image
Anton

A very minor tweak. i-1 doesn't require parentheses in this case.

divisorsList i = 
    [ x | x <- [1..i-1], i `mod` x == 0]