• 1
    Entrada y salida de datos
    • Tareas
  • 2
    Condiciones
    • Tareas
  • 3
    Bucle for
    • Tareas
  • 4
    Cadenas de texto
    • Tareas
  • 5
    Bucle while
    • Tareas
  • 6
    Listas
    • Tareas
  • 7
    Matrices 2D
    • Tareas
  • 8
    Diccionarios
    • Tareas
  • 9
    Conjuntos
    • Tareas
  • 10
    Funciones y recursión
    • Tareas
  • к

Lección 5. While cycle

Dificultad:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Tarea«Número perfecto»

💻 Python

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.

Formato de entrada

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.

Formato de salida

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.

Ejemplo

Entrada

6
28
12
1
0

Salida

Sí
Sí
No
no

Pista

There will be no clue here, decide for yourself!

main.py
Prueba 1
Prueba 2
Prueba 3
Prueba 4
Prueba 5
Prueba 6
Prueba 7
Prueba 8
Prueba 9
Prueba 10
Solución del desarrollador
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

red-snake blue-snake green-snake

Ejecutando tu código...

Asistente de IA

¡Hola! Soy tu asistente de programación. Hazme cualquier pregunta sobre Python — puedo explicarte funciones, métodos y ayudarte con la tarea actual.