[英]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.