sar*_*eph 4 python primes generator
我正在尝试编写一个生成函数来打印素数,如下所示
def getPrimes(n):
prime=True
i=2
while(i<n):
for a in range(2,i):
if(i%a==0):
prime=False
break
if(prime):
yield i
Run Code Online (Sandbox Code Playgroud)
然而,我没有得到理想的结果p = getPrimes(100)应该给我一个生成器函数,它将从2到100迭代质数,但我得到的结果是[2,3].我究竟做错了什么?
Wea*_*.py 10

它标志着关闭所有的倍数2,3,5,7和11.其余的都是素数.
def genprimes(limit): # derived from
# Code by David Eppstein, UC Irvine, 28 Feb 2002
D = {} # http://code.activestate.com/recipes/117119/
q = 2
while q <= limit:
if q not in D:
yield q
D[q * q] = [q]
else:
for p in D[q]:
D.setdefault(p + q, []).append(p)
del D[q]
q += 1
p = genprimes(100)
prms = [i for i in p]
print prms
Run Code Online (Sandbox Code Playgroud)
输出:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Run Code Online (Sandbox Code Playgroud)