P1835,但在本地和 Acwing Editor 上都跑得出来。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=5e6+5;
int p[maxn],x,ans;
bool vis[maxn];
void olprime(int n){
for(int i=2;i<=n;i++){
if(!vis[i]) p[++x]=i;
for(int j=1;j<=x&&i*p[j]<=n;j++){
vis[i*p[j]]=1;
if(i%p[j]==0) break;
}
}
}
int main(){
int l,r;
scanf("%d%d",&l,&r);
if(l==1) l++;
olprime((int)ceil(sqrt(r)));
memset(vis,0,sizeof(vis));
for(int i=1;i<=x;i++){
int start=l%p[i]==0?l:(l/p[i]+1)*p[i];
if(start==p[i]) start+=p[i];
for(int j=start;j<=r;j+=p[i]){
vis[j-l+1]=1;
}
}
for(int i=l;i<=r;i++)
ans+=(!vis[i-l+1]);
printf("%d",ans);
return 0;
}