สมมติว่าเราเป็นจำนวน 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 ฐาน 2) เหมือนกับ 0
- ในขณะที่ n> 1 ทำ
- คืนค่าเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
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