簡體   English   中英

Python中的素數生成器

[英]Prime number generator in 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)primeNr(50) ) - 我不知道為什么。

作為一個額外的問題 - 我如何使下面的代碼返回一個包含以下數字的列表,然后讓我們說我想要兩個變量p和q從質數列表中選擇一個隨機數,就像

p=primeNr(50)
q=primeNr(50)

(是的,它與RSA有關)。

范圍的第二個參數不包括在內,因此您需要執行以下操作:(您可以在此處查看文檔: python范圍的定義

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)

range不包括其最終限制。 因此,您將找到具有三個除數的數字(這是素數的平方)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM