素数:为什么这段代码给了我一些复合数字?

Ken*_* LJ 1 python

我似乎得到了所有素数,但一些复合数字也出现了.为什么?

p=[2,]
while len(p)<35:
        next = p[-1]+1
        for i in range(len(p)):
            if next%p[i]==0:
                next+=1
                i=0
        p.append(next)
print p     
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

[2,3,5,7,11,13,16,17,19,23,27,29,31,35,37,41,43,47,50,53,59,61,65,67,71 ,73,77,79,83,87,89,95,97,101,103]

afk*_*ion 7

因为next在for循环中更新时,您没有从主列表的开头进行扫描,以检查new next是否可以整除.您可以尝试以下方式.

p=[2,]
number=3
while len(p)<35:
    if all(number%i!=0 for i in p):
        p.append(number)
    number += 1
print p    
Run Code Online (Sandbox Code Playgroud)