篩法求素數(快速篩和普通篩)

2021-09-25 16:34:17 字數 722 閱讀 8778

先插乙個鏈結,這是我覺著關於這一方面,寫的比較好的部落格尤其是這個博主關於普通篩法的優化。

插乙個知識點:任何合數,都能寫成素數的積的形式。比如 6=2*3; 50=2*5*5。

根據上面那個部落格,我寫兩點自己想出來的東西:

普通篩法:關於為什麼:

當前剩下的最小的數就是質數(素數)

因為,假如a是合數,那麼a肯定是可以由比a小的數相乘得到的。既然,比a小的數字的倍數都已經被篩掉了,且a是當前沒被遍歷(第一重for迴圈)的最小的數,那a就肯定不是合數了。因為,a沒有比它更小的因子。

2.快速篩法:關於第二重迴圈

原部落格中說:只能篩出不大於p1的質數 * i。

那為什麼,能保證篩出時不漏掉合數呢?

因為當 i 為合數時,i能拆成好多素數的積的形式。而我們的素數 prime[j] 又是從小開始遍歷的,所以恰好可以不漏掉合數,將他們篩出來。

另外,附一點其他的收穫:想要證明程式時,可以使用數學歸納法,尤其是迴圈。就像原部落格那樣。

快速篩法求素數

stack queue的部落格 求素數是程式設計比賽中經常遇到的問題,最基本的方法是通過素數的定義直接判斷,只能被1和它本身整除的數就是素數了。這種方法適合判斷單個數是否為素數,當要求乙個範圍內素數而這個範圍又比較大時,這種方法就不太使用了,甚至程式要執行幾分鐘才能算出結果。篩法的思想是去除要求範圍...

快速篩法求素數

篩法的思想是去除要求範圍內所有的合數,剩下的就是素數了,而任何合數都可以表示為素數的乘積,因此如果已知乙個數為素數,則它的倍數都為合數。1 include2 using namespace std 3 define max 100000 4long long su max cnt 5bool isp...

篩法求素數 線性篩法求素數

2021年更新版 篩法求素數 線性篩法求素數 要理解篩法求素數首先要知道乙個定理,整數唯一分解定理 任意大於等於2的正整數都有且只有一種方式寫出其質因子的乘積表示式。a p1p2p3p4 pn pi是素數且pi pj eg 2 2 4 22 12 223 36 2233 也就是說任意乙個合數都能分成...