Вычислить сумму n первых совершенных чисел - PascalABC.NET
Формулировка задачи:
Дано натуральное число n. Вычислить сумму n первых совершенных чисел (натуральное число называется совершенным, если равно сумме всех своих делителей, исключая само себя).
Решение задачи: «Вычислить сумму n первых совершенных чисел»
textual
Листинг программы
begin
var n := ReadLnInteger('n = ');
var perfectNumbers := Range(2, MaxInt - 1)
.Where(number -> Range(1, number - 1).Where(i -> (number mod i) = 0).Sum() = number);
writeln(perfectNumbers.Take(n), perfectNumbers.Take(n).Sum():8);
end.
Объяснение кода листинга программы
Код решает задачу поиска суммы первых совершенных чисел.
var n := ReadLnInteger('n = ');- считывает из консоли количество чисел, которые нужно найти.var perfectNumbers := Range(2, MaxInt - 1)- создает последовательность всех чисел от 2 до (MaxInt - 1), где MaxInt - максимально возможное значение целого числа в данной системе..Where(number -> Range(1, number - 1).Where(i -> (number mod i) = 0).Sum() = number);- фильтрует последовательность, оставляя только те числа, которые являются совершенными. Для этого используется методWhere, который последовательно применяет заданную функцию (в данном случае, это функция, которая проверяет, делится ли число на любое из чисел от 1 до (number - 1)) и возвращает последовательность, содержащую только совершенные числа.writeln(perfectNumbers.Take(n), perfectNumbers.Take(n).Sum():8);- выводит на экран первыеnсовершенных чисел, а также их сумму. Примечание: В данном коде предполагается, что числоnне превышает 20. Если это условие не выполняется, то код может работать некорректно.