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

পাইথনে আকিলিস নাম্বার চেক করুন


मान लीजिए हमारे पास एक संख्या n है; हमें जांचना है कि क्या n एक अकिलीस संख्या है या नहीं। जैसा कि हम जानते हैं, एक संख्या अकिलीस संख्या होती है जब वह शक्तिशाली (एक संख्या N को पावरफुल नंबर कहा जाता है जब इसके हर अभाज्य गुणक p के लिए, p^2 भी इसे विभाजित करता है) लेकिन पूर्ण घात नहीं होती। अकिलीस संख्याओं के कुछ उदाहरण हैं: 72, 108, 200, 288, 392, 432, 500, 648, 675, 800, 864, 968, 972, 1125।

यदि इनपुट 108 जैसा है, तो आउटपुट True होगा, क्योंकि 6 और 36 दोनों इसे विभाजित करते हैं और यह पूर्ण वर्ग नहीं है।

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

  • check_powerful() नामक एक फंक्शन परिभाषित करें। यह n लेगा:
    • जब तक n % 2 == 0, करें:
      • p := 0
      • जब तक n % 2 == 0, करें: n := n / 2, p := p + 1
      • यदि p == 1, तो False लौटाएं
    • p := int(sqrt(n)) + 1
    • factor को 3 से p तक 2 बढ़ाकर, करें:
      • p := 0
      • जब तक n % factor == 0, करें: n := n / factor, p := p + 1
      • यदि p == 1, तो False लौटाएं
    • n == 1 होने पर true लौटाएं
  • check_power() नामक एक फंक्शन परिभाषित करें। यह a लेगा:
    • यदि a == 1, तो True लौटाएं
    • p := int(sqrt(a)) + 1
    • i को 2 से a तक 1 बढ़ाकर, करें:
      • val := log(a) / log(i) [सभी आधार e]
      • यदि (val - int(val)) < 0.00000001, तो True लौटाएं
    • False लौटाएं
  • मुख्य मेथड से, निम्नलिखित करें:
    • यदि check_powerful(n) == True और check_power(n) == False, तो True लौटाएं
    • अन्यथा, False लौटाएं

उदाहरण

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

from math import sqrt, log
def check_powerful(n):
    while n % 2 == 0:
        p = 0
        while n % 2 == 0:
            n /= 2
            p += 1
        if p == 1:
            return False
    p = int(sqrt(n)) + 1
    for factor in range(3, p, 2):
        p = 0
        while n % factor == 0:
            n = n / factor
            p += 1
        if p == 1:
            return False
    return n == 1

def check_power(a):
    if a == 1:
        return True
    p = int(sqrt(a)) + 1
    for i in range(2, a, 1):
        val = log(a) / log(i)
        if (val - int(val)) < 0.00000001:
            return True
    return False

def isAchilles(n):
    if check_powerful(n) == True and check_power(n) == False:
        return True
    else:
        return False

n = 108
print(isAchilles(n))

इनपुट

108

आउटपुट

True

  1. পাইথনে একটি সংখ্যা ডাইহেড্রাল প্রাইম (Dihedral Prime) কিনা যাচাই করা

  2. পাইথনে প্রাইম নম্বর চেক করা (Prime or Not)

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

  4. পাইথনে একটি সংখ্যা প্রাইম (Prime) কিনা তা কীভাবে যাচাই করবেন?