输入两个整数X和Y,输出两者之间的素数个数(包括X和Y)。
Input
两个整数X和Y(1 <= X,Y <= 10 5)。
Output
输出一个整数,表示X,Y之间的素数个数(包括X和Y)。
Sample Input
1 100
Sample Output
25
#include<bits/stdc++.h>
using namespace std;
const int maxn =1e5+6;
int p;
int prime[maxn];//第 i个素数
bool is_prime[maxn+1];//is_prime[i]为true表示素数
void sieve()
{
for(int i=0; i<=maxn; i++)
is_prime[i]=true;
is_prime[0]=is_prime[1]=false;
for(int i=2; i<=maxn; i++)
{
if(is_prime[i])
{
prime[++p]=i;
for(int j=2*i; j<=maxn; j+=i)//去掉i的倍数的数
is_prime[j]=false;
}
}
}
int main()
{
p=0;
sieve();
int x,y;
scanf("%d%d",&x,&y);
if(x>y)
{
int t=y;
y=x;
x=t;
}
int ans=0;
for(int i=1; i<=p; i++)
{
if(prime[i]>y)break;
else if(prime[i]>=x)
ans++;
}
printf("%d\n",ans);
return 0;
}