मान लीजिए हमारे पास एक संख्या 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