此题用最朴素的判断素数法,超时没商量,必须超。本菜无奈,在网上发现了筛法求素数,借鉴了一下,现贴出代码留念
#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