给定一个正整数n,如何最快速判断n是否是2的整数次幂
第一种方法:将n除2,得到商和余数,若余数不为0,则不是;当商不为0时,继续除2,当商为0时,此时余数为0,则是整数次幂,否则不是。
def isN(n):
if n == 1:
return True
while n != 1:
n, v = divmod(n, 2)
print(n, v)
if v != 0:
return False
if v == 0:
return True
return False
第二种方法:如果一个数是2的整数次幂,则其二进制形式有一个特点:除了最高位为1,其余位全为0.此时可以借鉴求取二进制中1的个数的方法。
def isN(n):
return n & (n-1) == 0