🎉 ¡Felicidades! 🎉
¡Has resuelto la tarea brillantemente! Era un reto difícil, pero encontraste la solución correcta. ¡Estás un paso más cerca de dominar la programación! Sigue así, cada etapa superada te hace más fuerte.
ProgerLib Python para todos
te esfuerzas por unirte a la "fraternidad secreta de los pitagóricos digitales". Esta antigua sociedad cree que los números gobiernan el universo, y los números especiales, "perfectos", guardan la clave de la armonía del mundo. Para demostrar tu valía, debes superar la "prueba de perfección".
El programa recibe una secuencia de números naturales como entrada, cada uno en una nueva línea. La entrada termina con el número 0. Para cada número ingresado (excepto 0), es necesario determinar si es perfecto.
Nota: Un número perfecto — Es un número natural igual a la suma de todos sus divisores propios (es decir, todos los divisores positivos, diferentes del número mismo). Por ejemplo, para el número 6, sus divisores propios son 1, 2 y 3. Su suma es 1 + 2 + 3 = 6, lo que significa que 6 — es un número perfecto.
Las entradas se suministran a la entrada del programa, cada una en una nueva línea. El último número en la secuencia es siempre 0. Este número & mdash; es una señal del final de la entrada, y no es necesario procesarlo.
Para cada número de la secuencia de entrada (excepto 0), el programa debe mostrar la palabra "yes" en una línea separada, si el número es completo, y "no", si no lo es.
6
28
12
1
0
Sí
Sí
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
🎉 ¡Felicidades! 🎉
¡Has resuelto la tarea brillantemente! Era un reto difícil, pero encontraste la solución correcta. ¡Estás un paso más cerca de dominar la programación! Sigue así, cada etapa superada te hace más fuerte.
AD
Publicidad
Ejecutando tu código...