歐式線性篩法(篩選素數)


	for(int i=2;i<1000001;i++){
		if(a[i]==0)b[l++]=i;
		for(int j=0;j<l;j++){
			if(b[j]*i>1000000)break;
		     a[b[j]*i]=1;
		     if(i%b[j]==0)break;
		}
}

可快速求一個區間內的素數個數和值
常識

一切合數都可以由一個素數乘合數或素數得來

思想:

首先此算法時間複雜度最低,因爲在給相應合數賦1時可以做到不重不漏。
此方法最難之處:
if(i%b[j]==0)break;
如果沒有此處那麼循環會繼續進行,而 i*b[j+1]%b[j]==0;因此某一個合數會被重複賦值。而加上此語句會使每個合數被最小的質因子與i的乘積賦值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章