Курс по 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 запазва само онези числа, които са равни на тази сума.

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

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