🎉 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.
ProgerLib Python pour tous
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.
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.
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.
6
28
12
1
0
Oui
Oui
Non
non
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é
Exécution de votre code...