AcWing 3701. 非素数个数
原题链接
简单
作者:
最后五分钟
,
2024-09-14 14:36:31
,
所有人可见
,
阅读 5
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e7+10;
int primes[N],st[N],cnt;
int s(int x)
{
int l=-1,r=cnt;
while(l+1!=r)
{
int mid=l+r>>1;
if(primes[mid]>x)r=mid;
else l=mid;
}
return l+1;
}
void init(int n)
{
for(int i=2;i<=n;i++)
{
if(!st[i])primes[cnt++]=i;
for(int j=0;primes[j]<=n/i;j++)
{
st[i*primes[j]]=1;
if(i%primes[j]==0)break;
}
}
}
signed main()
{
int a,b;
init(1e7);
while(cin>>a>>b)
{
if(a>b)swap(a,b);
int x=s(b)-s(a-1);
if(a==1)cout<<b-a+1-x-1<<endl;
else cout<<b-a+1-x<<endl;
}
return 0;
}