淺談素數篩
阿新 • • 發佈:2020-09-18
在素數篩裡,比較常用的有三種篩法
- 普通篩法
- 埃氏篩
- 尤拉篩
1.普通篩法
思想:遍歷\(2\)~\(\sqrt{n}\)內的每一個數,判斷其是否是\(n\)的因數。
如全部否,則\(n\)為素數,反之則反
inline bool judge_prime(int n){
for(int i=2;i*i<=n;i++){
if(n%i==0) return false;
}
return true;
}
2.Sieve of Eratosthenes(埃氏篩)
思想:給出要篩數值的範圍\(n\),找出以內的素數。
先用2去篩,即把2留下,把2的倍數剔除掉;再用下一個素數,也就是3篩,把3留下,把3的倍數剔除掉;接下去用下一個素數5篩,把5留下,把5的倍數剔除掉;不斷重複下去......
bool isprime[10001]; //此處陣列大小看n大小
inline void sieve(int n){
for(int i=0;i<=n;i++) isprime[i]=true;
isprime[0]=isprime[1]=false;
for(int i=2;i<=n;i++){
if(isprime[i]){
for(int j=2*i;j<=n;j+=i){ //j表示在n以內,i除本身外所有的倍數
isprime[j]=false;
}
}
}
//這個函式過後後,isprime[i]就表示i是否為素數
}