Курс языка программирования Raku / Приложение 🆕 / Работа с данными / Числа и математика / Exercises / Совершенные числа

Решение: Совершенные числа

Вот один из возможных вариантов решения задачи.

Код

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

say @perfect;

🦋 Исходный код можно найти в файле perfect-numbers.raku.

Вывод

[6 28]

Комментарии

  1. (1..^$n).grep($n %% *) оставляет те числа меньше $n, на которые оно делится нацело, — его собственные делители. %% * — это функция с Whatever, проверяющая делимость.

  2. [+] складывает эти делители, а внешний grep оставляет только те числа, которые равны получившейся сумме.

Навигация по курсу

Совершенные числа   |   Разложение на простые множители