判断一个数是否是 2、3、4的幂次方

2的几次幂

判断一个数是否是 2的幂次方:

思路:在二进制中 2^n形式如下

2^1=2:10                          1:01

2^2=4:100                        3:011

2^3=8:   1000                     4:0111

2^4=16:  10000                  5:01111

......

 

def isPowerOfTwo(n: int) -> bool:
    if n==0:
        return False
    else:
        return n&(n-1)==0

 

判断一个数是否是 3的幂次方:

判断N是否是3的几次幂

1. 在 int 类型范围内,最大的一个3的幂数,一定是其他3的幂数的3^x 倍

2. 除3余数==0, 且最后是 3/3==1,则为3^x

INT_MAX = 0X7fffffff
INT_MIN = 0X80000000
import math
def power_3(n):
    if n < 1:    return False
    import math
    k = math.log(INT_MAX) // math.log(3)
    big3 = math.pow(3, k)
    return big3 % n == 0

def power_3(n):
    if n<1: return False
    else:
        while n%3==0:
            n = n//3
    return n==1

判断一个数是否是 4的幂次方:

判断N是4的几次幂

1.

4^1: 4      100                       0101

4^2: 16     10000                  10101

4^3: 64      1000000            1010101010

 

2. 除4余数==0, 且最后是 4/4==1,则为4^x

def power_4(n):
    if n==1:
        return True
    return n&(n-1) and n&0x55555555

def power_44(num):
    if num < 1:
        return False
    else:
        while num > 1:
            num = num / 4
    return num == 1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值