我有一个python类,通过从第n-1个素数和增量开始生成第n个素数.然后除以列表中已经存在的所有素数(sqrt(候选)).但是我的班级只是在某个地方陷入无限循环,我无法弄明白为什么.
class prime_list():
def __init__(self):
self.primelst = [1]
self.n = 1
def increment(self):
self.n+=1
candidate = self.primelst[-1]+1
limit = int(math.floor(math.sqrt(candidate)))
prime = True
while True:
for p in self.primelst:
if p>limit:
break
if (candidate % p) == 0:
prime = False
break
if prime:
self.primelst.append(candidate)
return
else:
candidate += 1
limit = int(math.floor(math.sqrt(candidate)))
prime = True
if __name__=="__main__":
p = prime_list():
p.increment()
Run Code Online (Sandbox Code Playgroud)
问题是您将1
初始值作为首要列表.increment
然后该函数搜索不能被整除的数字1
.由于没有这样的数字,它会永远搜索.
您应该从2
初始最小素数开始,或者添加处理第一个素数生成的特殊情况.