• 1
    Entrada e saída
    • Tarefas
  • 2
    Condições
    • Tarefas
  • 3
    Loop for
    • Tarefas
  • 4
    Strings
    • Tarefas
  • 5
    Loop while
    • Tarefas
  • 6
    Listas
    • Tarefas
  • 7
    Matrizes 2D
    • Tarefas
  • 8
    Dicionários
    • Tarefas
  • 9
    Conjuntos
    • Tarefas
  • 10
    Funções e recursão
    • Tarefas
  • к

Lição 5. While cycle

Dificuldade:

Tarefa«Número perfeito»

💻 Python

você se esforça para se juntar à secreta "fraternidade dos pitagóricos digitais". Esta antiga sociedade acredita que os números governam o universo, e números especiais, "perfeitos", guardam a chave para a harmonia do mundo. Para provar seu valor, você deve passar no "teste da perfeição".

O programa recebe uma sequência de números naturais como entrada, cada um em uma nova linha. A entrada termina com o número 0. Para cada número inserido (exceto 0), é necessário determinar se ele é perfeito.

Definição: um número perfeito — É um número natural igual à soma de todos os seus divisores próprios (ou seja, todos os divisores positivos, diferentes do próprio número). Por exemplo, para o número 6, seus divisores próprios são 1, 2 e 3. A soma deles é 1 + 2 + 3 = 6, o que significa que 6 — é um número perfeito.

Formato de entrada

As entradas são fornecidas para a entrada do programa, cada uma em uma nova linha. O último número na sequência é sempre 0. Este número — é um sinal do fim da entrada, e não é necessário processá-lo.

Formato de saída

Para cada número da sequência de entrada (exceto 0), o programa deve exibir a palavra "yes" em uma linha separada, se o número for completo, e "no", caso contrário.

Exemplo

Entrada

6
28
12
1
0

Saída

Sim
Sim
Não
não

Dica

There will be no clue here, decide for yourself!

main.py
Teste 1
Teste 2
Teste 3
Teste 4
Teste 5
Teste 6
Teste 7
Teste 8
Teste 9
Teste 10
Solução do desenvolvedor
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

🎉 Parabéns! 🎉

Você resolveu a tarefa brilhantemente! Foi difícil, mas você encontrou a solução certa. Você está um passo mais perto de dominar a programação! Continue assim.

AD

Publicidade

red-snake blue-snake green-snake

Executando seu código...

Assistente de IA

Olá! Sou seu assistente de programação. Faça qualquer pergunta sobre Python — posso explicar funções, métodos e ajudá-lo com a tarefa atual!