快速篩選素數方法

2021-08-21 19:39:03 字數 598 閱讀 9670

篩選2-n素數有很多方法,最一般的方法就是利用素數的定義也就是利用素數只能被本身和1整除的性質進行篩選。但是這個方法效率太低,不建議使用這個方法。

有這麼一種方法,好像叫**拉托遜斯篩選法(我也不是很清楚)

**如下:

for (int i=2;i<=n;i++)

}

這個其實還是可以優化的,仔細想想這裡面有重複篩選的情況,比如6,它就是2*3,但是篩選的時候篩選了2次,因為它既是2的倍數,也是3的倍數。所以這個**還可以進一步優化。

**如下:

int pr[2000005];

void is_suu(int n)

}for (int i=2;i<=n;i++)

if(!pr[i])

printf("%d ",i);

printf("\n");

}

此方法避免了上述的情況。

還有一種篩選素數的方法

int isprime(int n)

具體例子可以看南陽oj 187.

也可以參考我寫的哦。。。雖然很菜。。

關於素數的快速查詢 素數篩選法

利用素數篩選法進行素數的快速查詢。原理很簡單,素數一定是奇數,素數的倍數一定不是素數。思路如下 預定義n表示10000,即表示查詢10000以內的素數,首先定義陣列prime對n以內的數進行標記,奇數存為1,偶數存為0,最終實現結果為素數的prime值為1,因此將prime 2 賦值為1 2是素數 ...

素數的篩選方法 從暴力篩選到線性篩選

也被就叫做試除法,對於每乙個整數n,你都可以進行一次從2到根號n的篩選,如果這個數不能被從2到根號n的任意乙個數整除,就可以確定這個數是素數.int prime maxn num void screening int n if flag prime num i 對於這種最樸素的方法所需的時間複雜度也...

三種素數篩選方法

第一種 剔除2 3 4 5 6 的倍數 在i從2開始的增一變化過程中,剔除i的倍數即j i j是大於等於2的自然數,j的上限是問題規模m 為了減少重複步驟,可以每當i遞增到等於第乙個沒有被剔除的 素 數時再剔除該數的倍數,重複上述過程至i到達問題規模m的平方根 1 需要說明的三個問題 假設迴圈到第n...