Python中的素数生成器

时间:2017-04-16 02:50:41

标签: python random primes

我正在尝试编写一个程序来显示2到50区间的素数。

type.factor <- as.factor(V(your.g)$type)
type <- as.numeric(type.factor)
meta.g <- contract.vertices(your.g,type)
E(meta.g)$weight <- 1
meta.g <- simplify(meta.g)

但是当我调用它时,我得到错误的输出(4,9,25,49)(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) ) - 我不知道为什么。

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

primeNr(50)

(是的,它与RSA有关)。

2 个答案:

答案 0 :(得分:5)

范围的第二个参数不包括在内,因此您需要执行以下操作:(您可以在此处查看文档:{​​{3}})

for j in range(1, i + 1)

在数学上有一些改进的机会,例如,你只需要循环到math.sqrt,并且在你意识到数字不是素数的第一刻,只需要休息。 (仍然没有最优化,进一步优化,你可以看看各种主要的筛子)。

import math

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

    #if interval itself should be included, then change this to range(2, interval + 1)
    for i in range(2, interval):
        isPrime = True
        for j in range(2, int(math.sqrt(i)) + 1):
            if i % j == 0:
                isPrime = False
                break
        if isPrime:
            print(i)

primeNr(50)

以下是基于@aryamccarthy的一些建议编辑(感谢推销这个想法!)。它使用特定的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)

答案 1 :(得分:4)

range不包括其最终限制。因此,您正在查找具有三个除数的数字(这是素数的平方)。