EOJ【1006】Prime 和素數有關的水題

此題用最樸素的判斷素數法,超時沒商量,必須超。本菜無奈,在網上發現了篩法求素數,借鑑了一下,現貼出代碼留念

#include<iostream>
#include<cmath>
#define n 1000000
using namespace std;
bool* isPrimes = new bool[1000001];
void FilterPrime()
{
	long count=0;
	for(int i=2;i<=n;++i)isPrimes[i] = true;
	isPrimes[2] = true;
	for(int j=2;j<=n;++j){
		if(isPrimes[j]==true)
			for(int m=2;j*m<=n;++m)isPrimes[j*m] = false;
	}
}
int main(){
    int a,b,i,sum;
    FilterPrime();
    while(cin>>a>>b){
       sum=0;
       for(i=a;i<=b;i++)
        if(isPrimes[i])
         sum++;
       cout<<sum<<endl;
    }
}

FilterPrime()即爲埃拉託斯特尼篩法。
篩法部分的代碼轉自:http://www.cnblogs.com/kingwolfofsky/archive/2012/01/13/2322061.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章