1. 程式人生 > 實用技巧 >淺談素數篩

淺談素數篩

在素數篩裡,比較常用的有三種篩法

  • 普通篩法
  • 埃氏篩
  • 尤拉篩

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是否為素數 
}