मान लीजिए हमारे पास एक संख्या n है। हमें यह जांचना है कि क्या दी गई संख्या n के सभी बिट्स सेट (1) हैं या नहीं।
उदाहरण के लिए, यदि इनपुट n = 255 है, तो आउटपुट True होगा क्योंकि 255 का बाइनरी प्रतिनिधित्व 11111111 है।
समाधान दृष्टिकोण
एक संख्या के सभी बिट्स सेट होने का अर्थ है कि वह 2^k - 1 रूप की है (जैसे 1, 3, 7, 15, 31, 63, 127, 255, ...)। हम बिटवाइज़ ऑपरेशन का उपयोग करके इसकी जांच कर सकते हैं।
एल्गोरिदम चरण (बिटवाइज़ विधि):
- यदि संख्या 0 है, तो False लौटाएं
- जब संख्या > 0:
- यदि संख्या सम है (LSB 0 है), तो False लौटाएं
- संख्या को राइट शिफ्ट करें:
number >>= 1 - True लौटाएं
अनुकूलित विधि: n & (n + 1) == 0 जांचें। यदि n के सभी बिट्स 1 हैं, तो n+2 की घात होगी और n & (n+1) = 0 होगा।
पायथन कार्यान्वयन
def solve(number):
if number == 0:
return False
while number > 0:
if (number & 1) == 0:
return False
number >>= 1
return True
# अनुकूलित संस्करण
def solve_optimized(number):
return number != 0 and (number & (number + 1)) == 0
n = 255
print(solve(n)) # True
print(solve_optimized(n)) # True
इनपुट
255
आउटपुट
True
व्याख्या:
255 का बाइनरी: 11111111 (8 बिट्स सभी 1)
255 + 1 = 256 = 100000000
255 & 256 = 0 ✓