Python中的质数生成器

2024-06-25 05:25:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写一个程序,显示2到50之间的质数。在

def primeNr(interval):
    print("Prime numbers from 2 to ",interval,"/n")

    for i in range(1, interval):
        c=0
        for j in range(1, i):
            if(i%j==0):
                c+=1
        if(c==2):
            print (i)

但是当我调用它(primeNr(50))时,我得到了错误的输出(4,9,25,49)-我不知道为什么。在

作为一个额外的问题-我如何让下面的代码返回一个包含以下数字的列表,然后假设我想有两个变量p和q,从质数列表中选择一个随机数,比如

^{pr2}$

(是的,它链接到RSA)。在


Tags: toinfrom程序列表forifdef
2条回答

^{}不包括其结束限制。因此,你会发现有三个除数的数(即素数的平方)。在

range的第二个参数不是inclusive,因此需要执行以下操作:(您可以在此处签出文档:definition of python range

for j in range(1, i + 1)

在数学上有一些改进的机会,例如,你只需要循环到math.sqrt,当你第一次意识到一个数字不是质数时,只要打破它。(仍然不是最优化的,要进一步优化,您可以查看各种优质筛)。在

^{pr2}$

以下是基于@aryamcarthy的一些建议编辑(感谢你提出这个想法!)。它使用特定的python语法-for…else(当循环正常完成而不遇到任何中断时,else子句执行):

import math

def primeNr(interval):
    print("Prime numbers from 2 to ", interval)

    for i in range(2, interval + 1):
        for j in range(2, int(math.sqrt(i)) + 1):
            if i % j == 0:
                break
        else:
            print(i)

primeNr(50)

相关问题 更多 >