题目描述 Description
判断[a,b]中素数的个数
输入描述 Input Description
输入共1行,a,b两数
输出描述 Output Description
输出共1行,输出素数的个数
样例输入 Sample Input
3 5
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
对于100%的数据,a,b≤5000,000
#include<cstdio>
bool check[5000005]={0};
int prime[2000000]={0};
int cnt=0;
int t=0;
void make(int n,int m)
{
for(int i=2;i<=m;i++)
{
if(check[i]==0)//check[i]==0即i为质数,check[i]==1即i为合数
{
if(i>=n)
{
t++;
}
prime[cnt++]=i;
}
for(int j=0;j<cnt&&i*prime[j]<=m;j++)
{
check[prime[j]*i]=1; //将所有质数的倍数标记为合数
if(i%prime[j]==0) break; //如果i是prime[j]的整数倍就跳出循环
}
}
}
int main()
{
int i,j;
int n,m;
scanf("%d%d",&n,&m);
make(n,m);
printf("%d\n",t);
return 0;
}