python - python 中的质数生成器最多 20

标签 python primes

我不明白为什么这个(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/

相关文章:

java - 我在我的 java 方法中找不到返回素数数组的错误。

primes - 埃拉托斯特尼筛法有巨大的 'overdraw' - Sundaram 筛法到底更好吗?

python - 在 Python 中有效地交换列表元素

python - Django makemessages 中的权限被拒绝

java - 在 hadoop 安装期间尝试执行命令 "hdfs: command not found"时出现 "hdfs namenode -format"

python - 如何共享多线程 python 脚本的标准输出?

algorithm - 为什么我的 Miller Rabin 算法不起作用(Haskell)?

javascript - 求250以下的素数之和

math - 小数的最快素数测试

python - Numpy 屏蔽数组 argmax 在完全屏蔽数组上不返回 'masked'?