篩選法求素數
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:
primNumber.append(i)
print(primNumber)
else:
print("輸入是數字不能小於2!")
else:
print("輸入了非法字符!")