使用素数生成器进行记忆

Mat*_*ips 4 python primes

我有一个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)

sth*_*sth 5

问题是您将1初始值作为首要列表.increment然后该函数搜索不能被整除的数字1.由于没有这样的数字,它会永远搜索.

您应该从2初始最小素数开始,或者添加处理第一个素数生成的特殊情况.

  • 1不是素数. (7认同)