मान लीजिए हमारे पास एक संख्या n और दूसरा मान x है, हमें जांचना है कि यह x की घात है या नहीं, जहां x 2 की घात वाली संख्या है।
इसलिए, यदि इनपुट n = 32768, x = 32 है, तो आउटपुट True होगा क्योंकि n, x^3 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- मुख्य विधि से निम्न कार्य करें:
- cnt := 0
- यदि n 0 नहीं है और (n AND (n - 1)) 0 के समान है, तो
- जब n > 1 हो, तब तक करें
- n = n/2
- cnt := cnt + 1
- वापस लौटाएं cnt mod (log c base 2) 0 के समान है
- जब n > 1 हो, तब तक करें
- False लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
def find_pow_of_2(n):
return (1 + find_pow_of_2(n / 2)) if (n > 1) else 0
def solve(n, c):
cnt = 0
if n and (n & (n - 1)) == 0:
while n > 1:
n >>= 1
cnt += 1
return cnt % (find_pow_of_2(c)) == 0
return False
n = 32768
x = 32
print(solve(n, x))
इनपुट
32768, 32
आउटपुट
True