🎉 Поздравляем! 🎉
Ты отлично справился с задачей! Это был непростой вызов, но ты нашёл правильное решение. Ты на шаг ближе к мастерству в программировании! Продолжай в том же духе, ведь каждый пройденный этап делает тебя ещё сильнее.
PythonLib
Питон для всех
Вы стремитесь вступить в тайное "Братство Цифровых Пифагорейцев". Это древнее общество верит, что числа управляют вселенной, а особые, "совершенные" числа, хранят в себе ключ к гармонии мира. Чтобы доказать свою ценность, вы должны пройти "Испытание Совершенства".
Программа получает на вход последовательность натуральных чисел, каждое на новой строке. Ввод завершается числом 0. Для каждого введенного числа (кроме 0) необходимо определить, является ли оно совершенным.
Справка: Совершенное число — это натуральное число, равное сумме всех своих собственных делителей (то есть всех положительных делителей, отличных от самого числа). Например, для числа 6 собственными делителями являются 1, 2 и 3. Их сумма 1 + 2 + 3 = 6, значит, 6 — совершенное число.
На вход программе подаются целые числа, каждое на новой строке. Последним числом в последовательности всегда является 0. Это число — признак конца ввода, и обрабатывать его не нужно.
Для каждого числа из входной последовательности (кроме 0) программа должна вывести на отдельной строке слово "YES", если число совершенное, и "NO", если нет.
6
28
12
1
0
YES
YES
NO
NO
def is_perfect(n):
"""
Проверяет, является ли число n совершенным.
"""
# Совершенные числа по определению больше 1.
if n <= 1:
return False
# Начинаем сумму с 1, так как 1 - делитель любого числа.
sum_of_divisors = 1
# Ищем делители до квадратного корня из n.
# Это эффективный способ, так как делители ходят парами.
# Например, для 28: (2, 14), (4, 7).
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
sum_of_divisors += i
# Добавляем парный делитель, если он не равен самому корню
if i * i != n:
sum_of_divisors += n // i
# Сравниваем сумму делителей с исходным числом.
return sum_of_divisors == n
# Основной цикл программы
while True:
try:
number = int(input())
# Если ввели 0, завершаем программу.
if number == 0:
break
if is_perfect(number):
print("YES")
else:
print("NO")
except (ValueError, EOFError):
# Обработка некорректного ввода или конца файла
break
🎉 Поздравляем! 🎉
Ты отлично справился с задачей! Это был непростой вызов, но ты нашёл правильное решение. Ты на шаг ближе к мастерству в программировании! Продолжай в том же духе, ведь каждый пройденный этап делает тебя ещё сильнее.
AD
Реклама
Запускаем ваш код...