Curso de Raku / Apéndice 🆕 / Trabajar con datos / Números y matemáticas / Exercises / Números perfectos

Solución: Números perfectos

Aquí tienes una posible solución para la tarea.

Código

my @perfect = (1..30).grep: -> $n {
    $n == [+] (1..^$n).grep($n %% *)
};

say @perfect;

🦋 Puedes encontrar el código fuente en el archivo perfect-numbers.raku.

Salida

[6 28]

Comentarios

  1. (1..^$n).grep($n %% *) conserva los números menores que $n que lo dividen sin resto: sus divisores propios. El %% * es una función Whatever que comprueba la divisibilidad.

  2. [+] suma esos divisores, y el grep exterior conserva solo los números que son iguales a esa suma.

Números perfectos   |   Factorización en primos