我在这里编写的筛选算法遇到了问题。我已经尝试修复它总共大约10个小时了。我在这里四处寻找类似的问题,但似乎找不到任何遇到此问题的人。我对 python 比较陌生,在阅读了大量生成器文档后,我设法编写了有效的代码。然而,我仍然不知道为什么我的第一次尝试失败了。
我所想到的是,在每个连续的筛分步骤中,似乎 gen1 实际上并没有被清空。因此,我尝试交替使用名称 gen1 和 gen2,并删除每个名称以避免此问题。那也没用。
我真的很感激对此的一些见解,以及任何改进我现在所拥有的建议。
这是失败的代码:
def primes(n):
"yields primes up to n. For use with large n"
q = 0
yield 2
gen1 = (x for x in range(3,n,2))
while q*q < n:
q = next(gen1)
gen1 = (x for x in gen1 if x%q != 0)
yield q
else:
while 1:
try:
yield next(gen1)
except:
StopIteration
break
Run Code Online (Sandbox Code Playgroud)
这是我当前的代码:
import math
global gen1
global gen
def gen1(x):
for i in range(3,x,2):
yield i
def …Run Code Online (Sandbox Code Playgroud) python recursion generator generator-expression sieve-of-eratosthenes