我试图生成范围x到y的所有素数.我先尝试了一个简单的例子:range(10,11)这意味着检查10是否是素数:
这是我的代码:
prime_list = [x for x in range(10, 11) for y in range(2,x) if x % x == 0 and x % 1 == 0 and x % y != 0]
Run Code Online (Sandbox Code Playgroud)
我知道事情是缺少告诉表达式的选项,x%y != 0应该检查所有y in range (2,x)并且当且仅当所有人都满足这个条件时才返回true.
我们怎么做?
我一直在使用埃拉托色尼的筛经历素数生成Python和人们吹捧为一个相对较快的选项,例如那些在少数人的解决方案 的答案的一个问题关于Python优化素数代都没有直接的和我在这里简单的实现与效率相媲美.我的实现如下
def sieve_for_primes_to(n):
size = n//2
sieve = [1]*size
limit = int(n**0.5)
for i in range(1,limit):
if sieve[i]:
val = 2*i+1
tmp = ((size-1) - i)//val
sieve[i+val::val] = [0]*tmp
return sieve
print [2] + [i*2+1 for i, v in enumerate(sieve_for_primes_to(10000000)) if v and i>0]
Run Code Online (Sandbox Code Playgroud)
定时执行返回
python -m timeit -n10 -s "import euler" "euler.sieve_for_primes_to(1000000)"
10 loops, best of 3: 19.5 msec per loop
Run Code Online (Sandbox Code Playgroud)
虽然下面给出了上述链接问题的答案中描述的方法,该方法是python菜谱中最快的
import itertools
def erat2( ):
D = { }
yield 2
for q in itertools.islice(itertools.count(3), …Run Code Online (Sandbox Code Playgroud)