首页 验证2的整数幂
文章
取消

验证2的整数幂

问题

如何检验一个数是否是2的整数幂?

解法

暴力检验

最直观的正向思考,如果一个数 a 是2的整数次幂,则1的 n 次幂等于 a 。

1
2
3
4
5
6
7
def is_power_of2(num):
    tmp = 1
    while tmp <= num:
        if tmp == num:
            return True
        tmp *= 2
    return False

反向思考,如果一个数 a 是2的整数幂,则它可以一直被2整除,直到商为1。

1
2
3
4
5
6
7
8
def is_power_of2(num):
    while num >= 0:
        if num == 1:
            return True
        num, remainder = divmod(num, 2)
        if remainder != 0:
            return False
    return False

这两种方法的时间复杂度都是 \(O(logn)\)

位运算

一个2的整数幂的值,用二进制表示是 1000 形式,而它与比它小1的值与运算就会变为0:

1000&111=0

于是可以得到一个简单的判断方法:

1
2
def is_power_of2(num):
    return num & (num - 1) == 0
本文由作者按照 CC BY 4.0 进行授权