🎉 恭喜! 🎉
你出色地完成了任务!这是一个不小的挑战,但你找到了正确答案。你离编程大师又近了一步!继续保持,每一步都让你更强大。
你渴望加入神秘的“数字毕达哥拉斯兄弟会”。这个古老的社团相信数字统治着宇宙,而特殊的“完美”数字则掌握着世界和谐的关键。为了证明你的价值,你必须通过“完美测试”。
程序接收一系列自然数作为输入,每个数占一行。输入以数字0结束。对于每个输入的数字(0除外),需要判断它是否为完美数。
说明: 完美数是指一个自然数,它等于其所有真因数(即除了自身以外的所有正因数)之和。例如,数字6的真因数为1、2和3,它们的和为1 + 2 + 3 = 6,因此6是一个完美数。
程序输入中提供了一系列条目,每个条目占一行。序列中的最后一个数字始终为0。该数字表示输入结束,无需对其进行处理。
对于输入序列中的每个数字(0除外),程序必须在单独一行中输出单词"yes"(如果该数字是完整的),否则输出"no"。
6
28
12
1
0
是
是
否
否
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
🎉 恭喜! 🎉
你出色地完成了任务!这是一个不小的挑战,但你找到了正确答案。你离编程大师又近了一步!继续保持,每一步都让你更强大。
AD
广告
正在运行代码...