Python 非素数只包含2,3,5,7个优化
任务是:Python 非素数只包含2,3,5,7个优化,python,python-3.x,algorithm,performance,primes,Python,Python 3.x,Algorithm,Performance,Primes,任务是: 给出了两个正整数a和b(b-a一些快速求解的建议 生成一个数组arr,其中数字只有这些数字{2,3,5,7} 使用预先计算的数组is_prime使用速度更快的筛子 仅使用arr中的有效值(非素数)生成新数组 在第三步中生成的新数组中使用二进制搜索,使用a和b作为计数 正如@ArjunSingh所建议的,首先创建一个只包含数字{2,3,5,7}的数组,它还只返回[a,b]范围内的数字 def interval(a, b): values = {0: [2,3,5,7]}
给出了两个正整数a和b(b-a一些快速求解的建议
arr
,其中数字只有这些数字{2,3,5,7}is_prime
使用速度更快的筛子arr
中的有效值(非素数)生成新数组正如@ArjunSingh所建议的,首先创建一个只包含数字{2,3,5,7}的数组,它还只返回[a,b]范围内的数字
def interval(a, b):
values = {0: [2,3,5,7]}
magnitude = 1
for r in range(1,10):
magnitude *= 10
values[r] = []
for digit in values[0]:
for value in values[r-1]:
n = digit*magnitude + value
if n <= b:
values[r].append(n)
continue
return [v for r1 in range(1,r+1) for v in values[r1] if v >= a]
return None # b is outside of the range 10**10
现在我们得到区间中的值,只打印那些不是素数的值
a = 220000
b = 240000
for i in interval(a,b):
if not is_prime(i):
print(i)
你说的缩进是什么?哎呀,是的,没有缩进你可以更快地找到特定范围内的所有素数奇怪的是a和b是@jdehesa,实际上目标是找到所有的非素数,所以我们应该在最终结果列表中包括2或5的素数,但是跳过这些数的素数测试
def is_prime(n):
if n % 10 in [2,5]:
return False
return all(n % i for i in range(3, int(n ** 0.5) + 1, 2))
a = 220000
b = 240000
for i in interval(a,b):
if not is_prime(i):
print(i)