Cho số n. Kiểm tra xem n có phải lũy thừa của 2 hay không.
Ví dụ: n = 2048 → True (vì 2048 = 2¹¹).
Thuật toán giải quyết (Thao tác bit O(1))
- Nếu
n == 0: trả vềFalse - Kiểm tra
(n & (n-1)) == 0:- Số lũy thừa của 2 có dạng nhị phân: 1000...0 (chỉ có 1 bit 1)
n-1sẽ là 0111...1- AND của hai số = 0
- Trả về kết quả
Ví dụ minh họa
def solve(n):
if n == 0:
return False
return (n & (n - 1)) == 0
n = 2048
print(solve(n))
Đầu vào
2048
Đầu ra
True