Курс Raku / Додаток 🆕 / Робота з даними / Числа та математика / Вправи / Досконалі числа

Розв’язання: Досконалі числа

Ось одне з можливих розв’язань задачі.

Код

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 залишає лише ті числа, що дорівнюють цій сумі.

Навігація курсом

Досконалі числа   |   Розклад на прості множники