python之求解100以內的所有素數

2021-10-03 03:43:24 字數 1959 閱讀 3081

質數(prime number)又稱素數,有無限個。

質數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數的數稱為質數。

如:2、3、5、7、11、13、17、19。

一、說明

判斷素數,函式或一般語句均可

100以內,設定迴圈上限

輸出格式要求

二、參考**

2.1 方法一(math庫)

import math #匯入math庫,以便使用裡面的乙個求平方根的函式

l =[2,

3]#因為range函式上限不能小於下線,所以2,3預先加到素數列表中,直接從5開始(因為知道4不是素數)迴圈

for i in

range(5

,101):

#第一層迴圈,從5到100

for j in

range(2

,int

(math.sqrt(i))+

1):#第二層迴圈,逐個判斷是否有因子

if i%j ==0:

#如果出現整除說明有因子

break

#跳出迴圈判斷下乙個

else

:#如果第二層迴圈結束還沒有跳出的話

#說明是素數,加到列表裡

print

(" "

.join(

map(

str, l)))

#先將列表中的元素變為字串再用空格連線輸出

2.2 方法二(list列表)
#找出100內所有素數

ls =

;for i in

range

(100):

if i <2:

continue

for j in

range(2

, i)

:if i%j ==0:

#print("不是素數".format(i));

break

;else

:#print("是素數".format(i));

;print

(ls)

;

2.3、大神**
print

(" "

.join(

"%s"

% x for x in

range(2

,100)if

not[y for y in

range(2

,x)if x % y ==0]

))

果然python什麼都能用一行**解決。。。

其實還看得不是很懂。。。等以後懂了再來講解。。

h  =

[true]*

100h[:2

]=[false

,false

]for i in

range(2

,int

(100

**0.5)+

1):if h[i]

: h[i*i:

:i]=

[false]*

len(h[i*i:

:i])

s=''

for i, e in

enumerate

(h):

if e:

s +=

str(i)

+' '

print

(s.strip(

))

三、深入講解

判斷素數的上限最準確的應該使用平方根取整加一,如上面**所示,但是如果向本題總共就判斷到100呢為了簡便使用近似的i//2+1即整除2加一也是可以的,驗證一下可以發現上限其實是擴大了的(比如根號5=2.23<5/2=2.5)的(根號2根號3進不了迴圈),所以是不會出錯的。

2.來自haotie

可參考判斷乙個數是不是素數 埃拉託斯特尼篩法 時間複雜度 o(n*lglgn)

3.菜鳥教程

Python 計算100以內素數之和

找出100內所有素數 ls for i in range 100 if i 2 continue 難點 1.range 2,2 返回空值,直接跳過迴圈,未執行break,else語句會被執行 2.for.j迴圈執行完畢後,如果未找到滿足i j 0的數值,證明其是素數,break不會被執行,else會...

100以內進行猜數字 Python

100以內進行猜數字 from random import randint while true print 你只有六次機會 count 1 計錄猜數次數 產生乙個100以內的隨機數 number randint 0,100 the number int input 請輸入數字 while the ...

python(2)輸出100以內的素數

方法 一 100以內素數 import math 如同c 中的 include defprime n 定義帶乙個引數n的函式 number 定義空陣列用來記錄位置上的數是素數true,不是false prime number 定義空陣列用來儲存素數 for i in range 0,n,1 遍歷0到...