篩選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...