python程式設計 篩選法求素數

2021-10-03 21:43:47 字數 1278 閱讀 3999

1. 題目要求:

使用列表實現篩選法求素數:編寫程式,輸入乙個大於2的自然數,然後輸出小於該數字的所有素數組成的列表。

2. 思路解析:

整個題目要求還是比較簡單的,只要知道怎麼篩選除素數就可以了,涉及的語法和內建函式都是比較常見的。題目需要列出所有小於輸入的數字(num),所以我們需要從1遍歷num-1,但是1既不是素數也不是合數,所以,我們可以直接從2開始。我們判斷乙個數是否為素數,就是讓它(i)去除所有小於它的數,如果除了1和它本身之外能夠整除,那這個數就不是素數。所以我們需要再內嵌乙個for迴圈,遍歷所有小於i的數(k),因為能被1整除不能算,所以我們從2開始,又因為如果大於i/2能整除的話,一定在2~i/2之間能整除,所以k的範圍就縮小到2 ~ i/2。在python裡,i/2可能存在小數,強制轉化int會丟失小數,所以可以+1。實際上k的範圍可以縮小至2 ~ 根號2的。python裡用sqrt(n)函式求根。需要匯入from math import sqrt。具體看**

3. code:

#!/usr/bin/python

# 宣告用於存放素數的列表

primnumber =

print

("請輸入正整數:"

)# 接收鍵盤輸入

num =

input()

# 判斷是否為整數,如果不是,結束程式

if num.isdigit():

# num轉化為int型別

num =

eval

(num)

if num >2:

# i即為要尋找的素數,常識可知,第乙個是2,從2遍歷到num

for i in

range(2

, num)

:# flag用於標記當前的數是否為素數(true:素數,false:合數)

flag =

true

# k從2開始遍歷到根號i即可,這裡圖方便,遍歷到i/2+1

for k in

range(2

,int

(i/2)+

1):# 判斷i是否可被k整除,如果可以,直接判斷為合數

if i % k ==0:

flag =

false

break

if flag:

print

(primnumber)

else

:print

("輸入是數字不能小於2!"

)else

:print

("輸入了非法字元!"

)

篩選法求素數

題目 求100以內的所有素數。求素數的演算法常考,篩選法求素數不常見。定義長度為101的int陣列a 101 初始化為1。依次測試1到100的所有數字是否為素數。若i為合數,則a i 0。篩選完畢後,所有非0元素a i 所對應的數字i為素數。include using namespace std i...

篩選法求素數

篩選法求素數 質數 prime number 又稱素數。乙個 大於1的自然數 除了1和它本身外,不能被其他自然數 質數 整除,換句話說就是該數除了1和它本身以外不再有其他的因數 否則稱為合數 一 一般求素數的方法 乙個數n的因子不會超過n,但是如果我們知道數n的乙個因子a後,另乙個因子b b n a...

篩選法求素數

一 素數的定義 對於素數的定義,維基百科上給出如下一段話 素數指在大於1的自然數中,除了1和此整數自身外,無法被其他自然數整除的數。比1大但不是素數的數稱為合數。二 利用電腦程式,很容易就可以得到不太大的素數。以c語言為工具來描述常見的判斷素數的函式 int isprime int n 這個函式並不...