python程序設計:篩選法求素數

篩選法求素數

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("輸入了非法字符!")

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章