Giả sử chúng ta là một số n và một giá trị khác x, chúng ta phải kiểm tra xem nó có phải là lũy thừa của x hay không, trong đó x là lũy thừa của 2.
Vì vậy, nếu đầu vào là n =32768 x =32, thì đầu ra sẽ là Đúng vì n là x ^ 3.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Từ phương thức chính, hãy làm như sau -
- cnt:=0
- nếu n khác 0 và (n AND (n - 1)) giống 0 thì
- while n> 1, do
- n =n / 2
- cnt:=cnt + 1
- return cnt mod (log c cơ số 2) giống như 0
- while n> 1, do
- trả về Sai
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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))
Đầu vào
32768, 32
Đầu ra
True