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}}==
|