您的位置:首页 > 其它

POJ 3978

2012-10-02 13:28 218 查看
题意:求区间[a,b]内所含质数个数。

题解:筛一遍素数,二分查找。

View Code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mr=100001;
bool notp[mr];
int pr[mr];
int pn;
void getpri()//筛素数
{
memset(notp,0,sizeof(notp));
for(int i=2; i<mr; i++)
{
if(!notp[i])
{
pr[pn++]=i;
}
for(int j=0; j<pn && i*pr[j]<mr; j++)
{
int k=i*pr[j];
notp[k]=1;
if(i%pr[j]==0)
break;
}
}
}
int cac(int x)
{
if(x<2)
return 0;
int mid,ll=0,rr=pn-1,ans=0;
while(ll<=rr)
{
mid=(ll+rr)>>1;
if(pr[mid]>x)
rr=mid-1;
else
ll=mid+1,ans=mid;
}
return ans+1;
}
int main()
{
pn=0;
getpri();
int a,b;
while(scanf("%d%d",&a,&b),a!=-1||b!=-1)
{
printf("%d\n",cac(b)-cac(a-1));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: