मान लीजिए हमारे पास एक संख्या n है; हमें जांचना है कि n एक अकिलीज़ संख्या है या नहीं। जैसा कि हम जानते हैं कि एक संख्या एच्लीस संख्या होती है जब एक संख्या शक्तिशाली होती है (एक संख्या एन को शक्तिशाली संख्या कहा जाता है जब इसके प्रत्येक प्रमुख कारक पी के लिए, पी ^ 2 भी इसे विभाजित करता है) लेकिन एक पूर्ण शक्ति नहीं। अकिलीज़ संख्याओं के कुछ उदाहरण हैं:72, 108, 200, 288, 392, 432, 500, 648, 675, 800, 864, 968, 972, 1125।
इसलिए, यदि इनपुट 108 की तरह है, तो आउटपुट ट्रू होगा, क्योंकि 6 और 36 दोनों इसे विभाजित करते हैं और यह पूर्ण वर्ग नहीं है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक फ़ंक्शन को परिभाषित करें check_powerful() । इसमें n . लगेगा
- जबकि n mod 2 समान है, करें
- p :=0
- जबकि n mod 2 0 के समान है, करें
- n :=n / 2
- p :=p + 1
- यदि p 1 के समान है, तो
- झूठी वापसी
- p :=का पूर्णांक (n का वर्गमूल) + 1
- 3 से p की श्रेणी में फ़ैक्टर के लिए, 2 की वृद्धि करें
- p :=0
- जबकि n मॉड फैक्टर 0 के समान है, करें
- n :=n / फ़ैक्टर
- p :=p + 1
- यदि p 1 के समान है, तो
- झूठी वापसी
- सही लौटें जब (n 1 के समान हो)
- एक फ़ंक्शन को परिभाषित करें check_power() । इसमें एक . लगेगा
- यदि a 1 के समान है, तो
- सही लौटें
- p :=का पूर्णांक (n का वर्गमूल) + 1
- मैं के लिए 2 से ए की सीमा में, 1 की वृद्धि करें
- वैल:=लॉग (ए) / लॉग (i) [सभी आधार ई]
- अगर (वैल - (वैल) का पूर्णांक भाग) <0.000000001, तो
- सही लौटें
- झूठी वापसी
- मुख्य विधि से, निम्न कार्य करें -
- यदि check_powerful(n) True के समान है और check_power(n) 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