Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Решить задание на python

shhhitzu Ученик (104), открыт 2 недели назад
Натуральное число называется совершенным, если оно равно сумме всех своих
делителей, за исключение себя самого. Число 6 – совершенное, так как 6 = 1+2+3.
Число 8 – несовершенное, так как 8 ≠ 1+2+4. Дано натуральное число n. Получить
все совершенные числа, меньшие n. Решение оформить в виде отдельных функций.
2 ответа
Вертолётов 625 Мудрец (13323) 2 недели назад
Код:
 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}")
Вадик Новиков Знаток (434) 2 недели назад
 def one(n: int): 
perfect = []
for i in range(1, n + 1):
perfect_num = two(i)
if perfect_num is not None:
perfect.append(perfect_num)
return(f'Список совершенных чисел: {perfect}')


def two(n: int):
dividers = []
for i in range(1, n + 1):
if n % i == 0 and n != i:
dividers.append(i)
if (sum(dividers)) == n:
return(n)


print(one(1000))
Похожие вопросы