কম্পিউটার টিউটোরিয়াল

পাইথনে ট্রোজান নাম্বার চেক করুন


मान लीजिए हमारे पास एक संख्या n है, हमें जांचना है कि क्या n एक ट्रोजन नंबर है या नहीं। जैसा कि हम जानते हैं, ट्रोजन नंबर एक ऐसी संख्या है जो एक स्ट्रांग नंबर है बिना पूर्ण घात के। एक संख्या n स्ट्रांग नंबर होती है जब इसके हर अभाज्य भाजक या गुणक p के लिए, p^2 भी एक भाजक होता है। दूसरे शब्दों में, हर अभाज्य गुणक कम से कम दो बार प्रकट होता है। ट्रोजन नंबर स्ट्रांग होते हैं। लेकिन रिवर्स सत्य नहीं है। इसका मतलब है, सभी स्ट्रांग नंबर ट्रोजन नंबर नहीं होते: केवल वे जिन्हें a^b के रूप में दर्शाया नहीं जा सकता।

यदि इनपुट 72 जैसा है, तो आउटपुट True होगा, क्योंकि 72 को (6*6*2) = (6^2 * 2) के रूप में दर्शाया जा सकता है। स्ट्रांग नंबर लेकिन पूर्ण घात के बिना।

इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:

  • check_perfect_pow() नामक एक फंक्शन परिभाषित करें। यह n लेगा:
    • यदि n == 1, तो True लौटाएं
    • x को 2 से int(sqrt(n)) + 1 तक के लिए, करें:
      • y := 2
      • p = x^y
      • जब तक p <= n और p > 0, करें:
        • यदि p == n, तो True लौटाएं
        • y := y + 1
        • p = x^y
    • False लौटाएं
  • check_strong_num() नामक एक फंक्शन परिभाषित करें। यह n लेगा:
    • count := संख्याओं की आवृत्ति रखने के लिए एक मैप, प्रारंभ में सभी 0
    • जब तक n % 2 == 0, करें: n := n // 2, count[2] += 1
    • i को 3 से int(sqrt(n)) + 1 तक 2 बढ़ाकर, करें:
      • जब तक n % i == 0, करें: n := n // i, count[i] += 1
    • यदि n > 2, तो count[n] += 1
    • flag := 0
    • count के प्रत्येक key,value के लिए, करें:
      • यदि value == 1, तो flag := 1, ब्रेक
    • यदि flag == 1, तो False लौटाएं
    • True लौटाएं
  • मुख्य मेथड से निम्नलिखित करें:
    • यदि check_perfect_pow(n) == False और check_strong_num(n) == True, तो true लौटाएं, अन्यथा false लौटाएं

उदाहरण

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:

from math import sqrt, pow
def check_perfect_pow(n):
    if n == 1:
        return True
    for x in range(2, int(sqrt(n)) + 1):
        y = 2
        p = x**y
        while p <= n and p > 0:
            if p == n:
                return True
            y += 1
            p = x**y
    return False

def check_strong_num(n):
    count = {i:0 for i in range(n)}
    while n % 2 == 0:
        n = n // 2
        count[2] += 1
    for i in range(3, int(sqrt(n)) + 1, 2):
        while n % i == 0:
            n = n // i
            count[i] += 1
    if n > 2:
        count[n] += 1
    flag = 0
    for key, value in count.items():
        if value == 1:
            flag = 1
            break
    if flag == 1:
        return False
    return True

def isTrojan(n):
    return check_perfect_pow(n) == False and check_strong_num(n)

n = 72
print(isTrojan(n))

इनपुट

72

आउटपुट

True

  1. প্রাইম নম্বর চেক করার পাইথন প্রোগ্রাম

  2. পাইথনে আর্মস্ট্রอง নম্বর চেক করা

  3. পাইথনে দুটি সংখ্যার বাইনারি রিপ্রেজেন্টেশন অনুগ্রাম (anagram) কিনা যাচাই করা

  4. Python-এ আর্মস্ট্রং নম্বর জেনারেট করা