Perfect totient numbers: Difference between revisions

→‎{{header|Haskell}}: Added a first Haskell draft
m (→‎{{header|Factor}}: Remove unused import)
(→‎{{header|Haskell}}: Added a first Haskell draft)
Line 215:
 
The output is the same as before.
 
=={{header|Haskell}}==
<lang haskell>import Data.Bool (bool)
 
perfectTotients :: [Int]
perfectTotients =
[2 ..] >>=
((bool [] . return) <*>
((==) <*> (succ . sum . tail . takeWhile (1 /=) . iterate φ)))
 
φ :: Int -> Int
φ = memoize (\n -> length (filter ((1 ==) . gcd n) [1 .. n]))
 
memoize :: (Int -> a) -> (Int -> a)
memoize f = (map f [0 ..] !!)
 
main :: IO ()
main = print $ take 20 perfectTotients</lang>
{{Out}}
<pre>[3,9,15,27,39,81,111,183,243,255,327,363,471,729,2187,2199,3063,4359,4375,5571]</pre>
 
=={{header|Perl}}==
9,655

edits