मान लीजिए हमारे पास एक संख्या n है, हमें जांचना है कि क्या n एक परफेक्ट स्क्वायर नंबर है या नहीं। एक परफेक्ट स्क्वायर नंबर k को k = a * a के रूप में दर्शाया जा सकता है किसी इंटीजर a के लिए। हमें इसे बिल्ट-इन स्क्वायर रूट फंक्शन के बिना हल करना है।
उदाहरण के लिए, यदि इनपुट है n = 121, तो आउटपुट होगा True क्योंकि 121 = 11*11।
समाधान दृष्टिकोण
रेंज [2, n//2] पर बाइनरी सर्च का उपयोग करके जांचें कि क्या कोई इंटीजर k मौजूद है जैसे कि k*k == n।
- यदि
n == 0याn == 1, तो True लौटाएं। start = 2,stop = n // 2आरंभ करें।- जब
start <= stop:midको रेंज के मध्य तत्व के रूप में गणना करें।- यदि
mid*mid == n, तो True लौटाएं। - यदि
mid*mid > n, तोstop = mid - 1। - अन्यथा
start = mid + 1।
- False लौटाएं।
पायथन कार्यान्वयन
def solve(n):
if n == 0 or n == 1:
return True
start = 2
stop = n // 2
while start <= stop:
temp = range(start, stop + 1)
k = temp[len(temp) // 2]
k_squared = k * k
if k_squared == n:
return True
if k_squared > n:
start = temp[0]
stop = k - 1
else:
start = k + 1
stop = temp[-1]
return False
n = 121
print(solve(n))
इनपुट
121
आउटपुट
True