我不明白为什么这个(python)代码不产生 1 到 20 之间的素数。
P = [2, 3]
p = 4
N = list(range(2, p))
M = list(range(1, p))
while True:
for n in N:
if p / n in M:
p += 1
if p == 20:
print(P)
break
else:
P.append(p)
p += 1
if p == 20:
print(P)
break
想法是从 4 开始,检查数字与另一个(较小的)之间的除法是否是孔号,如果是,则将其放入列表中,最后打印列表。
而不是打印它打印的素数。 [2, 3, 5, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
我知道这是一种非常低效的寻找素数的方法,但我仍然不明白为什么这不起作用。
谢谢,对不起我的英语。
最佳答案
如果你想使用 Python 生成器函数来获取素数,你可以执行以下操作
def getPrimes(n):
for i in range(2,n):
if(len([j for j in range(2,i-1) if i%j==0]) == 0):
yield i
n = 20
[i for i in getPrimes(n)]
[2, 3, 5, 7, 11, 13, 17, 19]
为方便起见,没有列表理解的 Python 生成器函数
def getPrimes(n):
for i in range(n):
if i < 3: yield i
for j in range(2,i):
if i % j == 0: break
if j == i - 1: yield i
使用一个简单的for循环
n = 20
primes = []
for i in range(2, n):
if i < 3: primes.append(i)
for j in range(2, i):
if i % j == 0: break
if j == i-1: primes.append(i)
primes
[2, 3, 5, 7, 11, 13, 17, 19]
使用带有列表理解的循环
n = 20
primes = []
for i in range(2, n):
if i < 3: primes.append(i)
elif len([j for j in range(2,i) if i%j==0]) == 0:
primes.append(i)
primes
[2, 3, 5, 7, 11, 13, 17, 19]
关于python - python 中的质数生成器最多 20,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49793298/