素數篩選(判斷

/*素數篩選,判斷小於MAXN的數是否是素數。
 *notprime是一張表,爲false表示是素數,true表示非素數
*/
const int MAXN=1000010;
bool notprime[MAXN];//值爲false表示素數,值爲true表示非素數
void init()
{
	memset(notprime,false,sizeof(notprime));
	notprime[0]=notprime[1]=true;
	for(int i=2;i<MAXN;i++)
	if(!notprime[i])
	{
		if(i>MAXN/i)continue;//防止後面i*i溢出(或者i,j用long long)
                //直接從i*i開始就可以,小於i倍的已經篩選過了,注意是j+=i;
		for(int j=i*i;j<MAXN;j+=i)
		notprime[j]=true;
	}
}


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