【发布时间】:2013-06-28 00:08:02
【问题描述】:
搜索python素数生成器,我发现:
def primes(n):
if n==2: return [2]
elif n<2: return []
s=range(3,n+1,2)
mroot = n ** 0.5
half=(n+1)/2-1
i=0
m=3
while m <= mroot:
if s[i]:
j=(m*m-3)/2
s[j]=0
while j<half:
s[j]=0
j+=m
i=i+1
m=2*i+3
return [2]+[x for x in s if x]
print primes(13)
print primes(3000)
还有:
def get_primes(number):
while True:
if is_prime(number): #is_prime is defined somewhere else
yield number
number += 1
什么更有效,返回列表还是 yield 命令?为什么?考虑一下我正在寻找大量的素数,比如前 1000 个素数。对了,第二段代码好像是死循环了,怎么停止呢?
感谢和抱歉这么多问题。
【问题讨论】:
-
这两种方法完全没有可比性;一个循环遍历所有可能的数字并测试每个数字,另一个通过实现筛子更有效地处理它。您在这里比较苹果和梨。
标签: python return primes yield