给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数。
计算置位位数 就是二进制表示中 1 的个数。
例如, 21 的二进制表示 10101 有 3 个计算置位。
- #方法一:直接模拟
- def countPrimeSetBits(left,right):
- ans=0
- def count1(n):
- res=0
- while n:
- res+=n&1
- n>>=1
- return res #计算1的个数
- for i in range(left,right+1):
- tem=count1(i)
- flag=True if tem!=1 else False #判断是不是素数
- for j in range(2,tem//2+1):
- if tem%j == 0:
- flag=False
- break
- if flag:
- ans+=1
- return ans
给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。
如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。
- #方法一:位运算模拟
- def binaryGap(n):
- res=[] #记录下标
- ind=0
- while n :
- if n&1==1:
- res.append(ind)
- ind+=1
- n>>=1
- if len(res)<=1:
- return 0 #特殊情况
- return max([res[i+1]-res[i] for i in range(0,len(res)-1)]) #相邻1的最大值