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