Код:
def divisors_sum(num):
"""
Вычисляет сумму всех делителей числа num, за исключением самого числа.
:param num: натуральное число
:return: сумма делителей числа num, кроме самого числа
"""
if num < 2:
return 0
# Суммируем все делители от 1 до sqrt(num)
total = 1 # 1 - всегда делитель любого числа, кроме 1
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
total += i
other_divisor = num // i
if other_divisor != i: # Добавляем сопряженный делитель, если он отличен от текущего
total += other_divisor
return total
def is_perfect(num):
"""
Проверяет, является ли число совершенным.
:param num: натуральное число
:return: True, если число совершенное, иначе False
"""
return divisors_sum(num) == num
def find_perfect_numbers(n):
"""
Находит все совершенные числа, меньшие n.
:param n: верхняя граница поиска (натуральное число)
:return: список всех совершенных чисел меньше n
"""
perfect_numbers = []
for i in range(2, n):
if is_perfect(i):
perfect_numbers.append(i)
return perfect_numbers
# Ввод данных от пользователя
try:
n = int(input("Введите натуральное число n: "))
if n <= 0:
raise ValueError("Число должно быть положительным.")
perfect_numbers = find_perfect_numbers(n)
print(f"Совершенные числа меньше {n}: {perfect_numbers}")
except ValueError as e:
print(f"Ошибка ввода: {e}")
делителей, за исключение себя самого. Число 6 – совершенное, так как 6 = 1+2+3.
Число 8 – несовершенное, так как 8 ≠ 1+2+4. Дано натуральное число n. Получить
все совершенные числа, меньшие n. Решение оформить в виде отдельных функций.