"""
判断一个区间内数字的二进制表示是质数的数目
"""import math
defcount_1_binary(n):"""
统计二进制表示1的个数
"""
count = 0while n:
count += 1
n = n&(n-1)
return count
defis_prim(n):"""
判断是否是质数
"""for i in range(2, n/2):
if n%i==0: return0return1defis_prime(n):for i in range(2, int(math.sqrt(n))):
if n%i==0: return0return1defis_prime_3(n):"""
质数分布规律,大于等于5的质数一定和6的倍数相邻
6i+1 6i-1的情况,循环步长定位为6,每次判断k和k+2的情况
理论上比srqt快3倍
"""if n==2or n==3: return1if n%6!=1and n%6!=5: return0
temp = int(math.sqrt(n))
for i in range(5,temp,6):
if n%i==0or n%(i+2)==0: return0return1deftest():
x = [1,100]
# print(count_1_binary(7))
count = 0for i in range(x[0],x[1]+1):
u = count_1_binary(i)
if is_prime_3(u)==1:
count += 1
print(count)
test()