• 1
    إدخال وإخراج البيانات
    • المهام
  • 2
    الشروط
    • المهام
  • 3
    حلقة for
    • المهام
  • 4
    السلاسل النصية
    • المهام
  • 5
    حلقة while
    • المهام
  • 6
    القوائم
    • المهام
  • 7
    مصفوفات ثنائية الأبعاد
    • المهام
  • 8
    القواميس
    • المهام
  • 9
    المجموعات
    • المهام
  • 10
    الدوال والتكرار
    • المهام
  • к

درس 5. While cycle

الصعوبة:

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

مسألة«عدد مثالي»

💻 Python

تسعى جاهدًا للانضمام إلى "جماعة الفيثاغوريين الرقميين" السرية. تعتقد هذه الجماعة القديمة أن الأرقام تتحكم في الكون، وأن الأرقام "المثالية" الخاصة تحمل مفتاح انسجام العالم. لإثبات قيمتك، يجب عليك اجتياز "اختبار الكمال".

يستقبل البرنامج سلسلة من الأعداد الطبيعية كمدخلات، كل منها في سطر جديد. ينتهي الإدخال بالرقم 0. لكل رقم يتم إدخاله (باستثناء 0)، يجب تحديد ما إذا كان مثاليًا.

ملاحظة: العدد المثالي — هو عدد طبيعي يساوي مجموع جميع قواسمه الذاتية (أي جميع القواسم الموجبة المختلفة عن العدد نفسه). على سبيل المثال، بالنسبة للعدد 6، القواسم الذاتية هي 1 و 2 و 3. مجموعها هو 1 + 2 + 3 = 6، مما يعني أن 6 — عدد مثالي.

تنسيق الإدخال

يتم إدخال البيانات إلى البرنامج، كل إدخال في سطر جديد. الرقم الأخير في التسلسل هو دائمًا 0. هذا الرقم — علامة على نهاية الإدخال، وليس من الضروري معالجته.

تنسيق الإخراج

لكل رقم من تسلسل الإدخال (باستثناء 0)، يجب على البرنامج إخراج الكلمة "yes" في سطر منفصل، إذا كان الرقم مكتملاً، و "no" إذا لم يكن كذلك.

مثال

إدخال

6
28
12
1
0

إخراج

نعم
نعم
لا
لا

تلميح

There will be no clue here, decide for yourself!

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 — يمكنني شرح الدوال والطرق ومساعدتك في المهمة الحالية!