python实现判断一个数是否是2的n次方
2020年3月9日
来源: 网络转载
算法1:构造法
对1进行移位操作,即从1开始产生2 0 , 2 1 , 2 2 ⋅ ⋅ ⋅ 2^0,2^1,2^2···20,21,22⋅⋅⋅,如果产生的数相等,则该数是2的n次方,如果产生的数小于该数,则继续移位,如果产生的数大于该数,则该数不是2的n次方。
python实现
def is_two_power(n):
if n < 1:
return False
i = 1
while i <= n:
if i == n:
return True
i <<= 1
return False
def main():
print(is_two_power(8))
print(is_two_power(9))
if __name__ == '__main__':
main()
输出:
True
False
复杂度分析
设给定数为n nn,算法运行k kk次,则2 k = n 2^k=n2k=n,k = log 2 ( n ) k=\log_2(n)k=log2(n),因此复杂度为o ( l o g 2 ( n ) ) o(log_2(n))o(log2(n))。
算法2:与操作法
对2 0 , 2 1 , 2 2 ⋅ ⋅ ⋅ 2^0,2^1,2^2···20,21,22⋅⋅⋅进行分析,其二进制分别为1,10,100···&