समस्या विवरण
एक संख्या n दी गई है, जांचें कि क्या यह अकिलीज़ नंबर है। अकिलीज़ नंबर = शक्तिशाली संख्या (हर अभाज्य गुणक p के लिए, p² भी विभाजित करता है) लेकिन पूर्ण घात नहीं (a^b रूप में नहीं)।
उदाहरण
इनपुट: 108
आउटपुट: True
108 = 2² × 3³ — दोनों अभाज्य गुणकों के वर्ग विभाजित करते हैं, लेकिन 108 पूर्ण वर्ग/घन नहीं है।
एल्गोरिदम
check_powerful(n): अभाज्य गुणनखंड करके प्रत्येक का घात ≥2 जांचेंcheck_power(n): जांचें कि क्याn = a^b(b≥2) रूप में है- अकिलीज़ यदि:
powerful == Trueऔरpower == 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
for factor in range(3, int(sqrt(n)) + 1, 2):
p = 0
while n % factor == 0:
n //= factor
p += 1
if p == 1:
return False
return n == 1
def check_power(a):
if a == 1:
return True
for i in range(2, int(sqrt(a)) + 1):
val = log(a) / log(i)
if abs(val - round(val)) < 1e-8:
return True
return False
def isAchilles(n):
return check_powerful(n) and not check_power(n)
print(isAchilles(108))
इनपुट
108
आउटपुट
True