版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_20280061/article/details/82182181
网易有道面试算法题
"""
判断一个区间内数字的二进制表示是质数的数目
"""
import math
def count_1_binary(n):
"""
统计二进制表示1的个数
"""
count = 0
while n:
count += 1
n = n&(n-1)
return count
def is_prim(n):
"""
判断是否是质数
"""
for i in range(2, n/2):
if n%i==0: return 0
return 1
def is_prime(n):
for i in range(2, int(math.sqrt(n))):
if n%i==0: return 0
return 1
def is_prime_3(n):
"""
质数分布规律,大于等于5的质数一定和6的倍数相邻
6i+1 6i-1的情况,循环步长定位为6,每次判断k和k+2的情况
理论上比srqt快3倍
"""
if n==2 or n==3: return 1
if n%6!=1 and n%6!=5: return 0
temp = int(math.sqrt(n))
for i in range(5,temp,6):
if n%i==0 or n%(i+2)==0: return 0
return 1
def test():
x = [1,100]
# print(count_1_binary(7))
count = 0
for i in range(x[0],x[1]+1):
u = count_1_binary(i)
if is_prime_3(u)==1:
count += 1
print(count)
test()