• 1
    Entrée et sortie
    • Tâches
  • 2
    Conditions
    • Tâches
  • 3
    Boucle for
    • Tâches
  • 4
    Chaînes
    • Tâches
  • 5
    Boucle while
    • Tâches
  • 6
    Listes
    • Tâches
  • 7
    Tableaux 2D
    • Tâches
  • 8
    Dictionnaires
    • Tâches
  • 9
    Ensembles
    • Tâches
  • 10
    Fonctions et récursion
    • Tâches
  • к

Leçon 5. While cycle

Difficulté :

Exercice«Nombre parfait»

💻 Python

Vous cherchez à rejoindre la secrète "fraternité des Pythagoriciens numériques". Cette ancienne société croit que les nombres régissent l'univers, et que des nombres spéciaux, "parfaits", détiennent la clé de l'harmonie du monde. Pour prouver votre valeur, vous devez réussir le "test de perfection".

Le programme reçoit en entrée une séquence de nombres naturels, chacun sur une nouvelle ligne. La saisie se termine par le nombre 0. Pour chaque nombre saisi (sauf 0), il est nécessaire de déterminer s'il est parfait.

Note : Un nombre parfait est un nombre naturel égal à la somme de tous ses diviseurs propres (c'est-à-dire tous les diviseurs positifs, différents du nombre lui-même). Par exemple, pour le nombre 6, les diviseurs propres sont 1, 2 et 3. Leur somme est 1 + 2 + 3 = 6, ce qui signifie que 6 est un nombre parfait.

Format d entrée

Des entrées sont fournies à l'entrée du programme, chacune sur une nouvelle ligne. Le dernier nombre de la séquence est toujours 0. Ce nombre & mdash; est un signe de fin de l'entrée, et il n'est pas nécessaire de le traiter.

Format de sortie

Pour chaque nombre de la séquence d'entrée (sauf 0), le programme doit afficher le mot "yes" sur une ligne séparée, si le nombre est complet, et "no", sinon.

Exemple

Entrée

6
28
12
1
0

Sortie

Oui
Oui
Non
non

Indice

There will be no clue here, decide for yourself!

main.py
Test 1
Test 2
Test 3
Test 4
Test 5
Test 6
Test 7
Test 8
Test 9
Test 10
Solution du développeur
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

🎉 Félicitations ! 🎉

Tu as brillamment résolu la tâche ! C était difficile, mais tu as trouvé la bonne solution. Tu es encore plus proche de maîtriser la programmation ! Continue ainsi.

AD

Publicité

red-snake blue-snake green-snake

Exécution de votre code...

Assistant IA

Bonjour ! Je suis ton assistant de programmation. Pose moi toutes tes questions sur Python — je peux t expliquer les fonctions, les méthodes et t aider avec la tâche en cours !