0votos

Números perfectos en Haskell

por josejuan hace 2 meses

Factorizando obtenemos los ocho primeros instantáneamente.

Encontrar números perfectos entre 0 y 10000. En lenguaje C.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import Data.Numbers.Primes 
import Data.List 
 
sumdivs :: Integral a => a -> a 
sumdivs n = product [sum [x^p | p <- [0 .. length xs]] | xs@(x:_) <- group (primeFactors n)] 
 
perfectos :: Integral a => [a] 
perfectos = filter (\n -> 2 * n == sumdivs n) [2^(p - 1) * (2^p - 1) | p <- primes] 
 
{- 
 
> mapM_ print $ take 8 perfectos 
28 
496 
8128 
33550336 
8589869056 
137438691328 
2305843008139952128 
(0.02 secs, 16,783,432 bytes) 
 
-} 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.