• 1
    Ввод и вывод данных
    • Задачи
  • 2
    Условия
    • Задачи
  • 3
    Цикл for
    • Задачи
  • 4
    Строки
    • Задачи
  • 5
    Цикл while
    • Задачи
  • 6
    Списки
    • Задачи
  • 7
    Двумерные массивы
    • Задачи
  • 8
    Словари
    • Задачи
  • 9
    Множества
    • Задачи
  • 10
    Функции и рекурсия
    • Задачи
  • к

Занятие 5. Цикл while

Уровень сложности:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Задача«Совершенное число»

Вы стремитесь вступить в тайное "Братство Цифровых Пифагорейцев". Это древнее общество верит, что числа управляют вселенной, а особые, "совершенные" числа, хранят в себе ключ к гармонии мира. Чтобы доказать свою ценность, вы должны пройти "Испытание Совершенства".

Программа получает на вход последовательность натуральных чисел, каждое на новой строке. Ввод завершается числом 0. Для каждого введенного числа (кроме 0) необходимо определить, является ли оно совершенным.

Справка: Совершенное число — это натуральное число, равное сумме всех своих собственных делителей (то есть всех положительных делителей, отличных от самого числа). Например, для числа 6 собственными делителями являются 1, 2 и 3. Их сумма 1 + 2 + 3 = 6, значит, 6 — совершенное число.

Формат ввода

На вход программе подаются целые числа, каждое на новой строке. Последним числом в последовательности всегда является 0. Это число — признак конца ввода, и обрабатывать его не нужно.

Формат Вывода

Для каждого числа из входной последовательности (кроме 0) программа должна вывести на отдельной строке слово "YES", если число совершенное, и "NO", если нет.

Пример

Ввод

6
28
12
1
0

Вывод

YES
YES
NO
NO

Подсказка

Тут подсказки не будет, решай сам!

main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика
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

Реклама

red-snake blue-snake green-snake

Запускаем ваш код...

Помощник ИИ

Привет! Я твой помощник по программированию. Задавай любые вопросы по Python, я могу рассказать о функциях, методах, обьяснить то, что тебе не понятно, а так же о текущей задаче!