🎉 Glückwunsch! 🎉
Du hast die Aufgabe hervorragend gelöst! Es war schwierig, aber du hast die Lösung gefunden. Du bist dem Meister einen Schritt näher! Mach weiter so.
ProgerLib Python für alle
Du strebst danach, der geheimen "Bruderschaft der digitalen Pythagoreer" beizutreten. Diese uralte Gesellschaft glaubt, dass die Zahlen das Universum regieren und besondere, "perfekte" Zahlen den Schlüssel zur Harmonie der Welt bewahren. Um deinen Wert zu beweisen, musst du den "Test der Perfektion" bestehen.
Das Programm erhält eine Folge von natürlichen Zahlen als Eingabe, jede in einer neuen Zeile. Die Eingabe endet mit der Zahl 0. Für jede eingegebene Zahl (außer 0) muss bestimmt werden, ob sie perfekt ist.
Hinweis: Eine vollkommene Zahl — Dies ist eine natürliche Zahl, die gleich der Summe all ihrer echten Teiler ist (das heißt, aller positiven Teiler, die von der Zahl selbst verschieden sind). Zum Beispiel sind für die Zahl 6 die echten Teiler 1, 2 und 3. Ihre Summe ist 1 + 2 + 3 = 6, was bedeutet, dass 6 — eine vollkommene Zahl ist.
Es werden Einträge an die Eingabe des Programms übergeben, jeder in einer neuen Zeile. Die letzte Zahl in der Sequenz ist immer 0. Diese Zahl & mdash; ein Zeichen für das Ende der Eingabe, und es ist nicht notwendig, sie zu verarbeiten.
Für jede Zahl aus der Eingabesequenz (außer 0) muss das Programm in einer separaten Zeile das Wort "yes" ausgeben, wenn die Zahl vollständig ist, und "no", wenn nicht.
6
28
12
1
0
Ja
Ja
Nein
nein
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
🎉 Glückwunsch! 🎉
Du hast die Aufgabe hervorragend gelöst! Es war schwierig, aber du hast die Lösung gefunden. Du bist dem Meister einen Schritt näher! Mach weiter so.
AD
Werbung
Führe deinen Code aus...