篩選法求素數

2021-06-26 06:40:03 字數 1025 閱讀 2930

一、素數的定義:

對於素數的定義,維基百科上給出如下一段話:素數指在大於1的自然數中,除了1和此整數自身外,無法被其他自然數整除的數。比1大但不是素數的數稱為合數。

二、利用電腦程式,很容易就可以得到不太大的素數。以c語言為工具來描述常見的判斷素數的函式:

int isprime(int n)

這個函式並不是很完善,沒有對引數檢測。引入變數a使時間複雜度略減。這個函式不利於大量產生素數,下面介紹一種生成素數的演算法,大名鼎鼎的:篩選法求素數。

三、篩選法求素數的完整的c語言程式:

#include #define n 100

int main(void)

return 0;

}

該演算法求素數的途徑是改變陣列的內容,利用陣列的下標表示素數。這句話真不通順,請看下面。

陣列a的元素均初始化為1。第二個for迴圈,i的範圍從2到n,是判斷素數的範圍。當前a[i]為0時i不是素數。當找到乙個素數x時,通過巢狀的for(j=i; j<=n; j+=i)迴圈將範圍內是x倍數的數都排除掉,即a[j]=0;

這種方法為什麼可行呢?

算數基本定理證明了每個大於1的正整數都可以寫成素數的乘積,並且這種乘積的形式是唯一的。素數被比作自然數的「基石(base)」。

打個比方,這就像是日常生活中常見的篩子一樣,用找到的素數篩選出合數丟掉,再找乙個素數來篩選,依次做下去...最後篩子裡的不都是素數嗎?

大家可以舉例試驗來幫助理解。

四、關於素數

素數在數論、密碼學等學科中均占有重要的地位。

最小的素數是2,也是素數中唯一的偶數;其他素數都是奇數。質數有無限多個,所以不存在最大的質數。目前已知的最大素數是: 2^43112609 - 1,長度為12978189。

素數的分布是無規律的,目前數學家們還沒有辦法用乙個公式來表示所有的素數。目前數學界的素數公式是指一種僅能夠產生素數的公式。但對於「真正的」素數公式應有的性質,已經有了大量的了解。

素數

篩選法求素數

題目 求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...

篩選法求素數

篩選法求素數。線性時間複雜度。將合數都標記,剩下的就是素數。出現乙個數,則把已這個數為因子的數都標記為合數。如2,所以4,6,8 10.都標記為合數 如3,所以9,12,15.都標記為合數 如4,所以16,20,24.都標記為合數 即,若i是素數,則從 j i i 開始,把 j i j 2i j 3...