# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第6章 基本数字运算 6.2 如何判断一个数是否为2的n次方
题目:
分析:
我记得是递归做的,
16是2的4次方
32是2的5次方
31不是2的n次方
暴力破解,每次除以2,直到不能被除尽,或者结果为1后,说明是2的n次方,
时间复杂度为O(logN)
查表法,事先将python所能表示的所有2的n次方都事先保存下来,这个应该没有多少,
之后建立<数字,2的n次方中的n>这种方式,
时间复杂度为O(1)
关键:
1 书上解法
2的n次方这个数,只有1个bit位上为1,
那么n & (n-1)的结果必然为0
2 没有想到
忘记2的n次方这个特殊性质是比特位只有1位为1
参考:
Python程序员面试算法宝典
'''
def isPower(n):
if n < 1:
return False
result = n & (n-1)
return True if 0 == result else False
def process():
n = 16
result = isPower(n)
print result
n = 32
result = isPower(n)
print result
n = 31
result = isPower(n)
print result
if __name__ == "__main__":
process()