求助,28分
很神奇
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=2e+9;
const int N1=1e4;
const int N=1e6;
ll prime[N1+5],vis[N1+5];
ll a[N+5];
ll L,R;
void Prime(ll n){
for(ll i=1;i<=n;i++)vis[i]=0;
prime[0]=0;
for(ll i=2;i<=n;i++){
if(!vis[i])prime[++prime[0]]=i;
for(ll j=1;j<=prime[0]&&i*prime[j]<=n;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0)break;
}
}
}
int main(){
scanf("%lld%lld",&L,&R);//不知道为什么这里输入有问题,太大输不了
Prime(50000);
for(ll i=0;i<=R;i++)a[i]=0;
for(ll i=1;i<=prime[0]&&prime[i]<=R;i++){
//printf("%lld ",prime[i]);
for(ll j=max(2LL,(L-1)/prime[i]+1);j*prime[i]<=R;j++){
//printf("%lld ",j*prime[i]);
a[j*prime[i]-L]=1;
}
//puts("");
}
ll sum=0;
for(ll i=L;i<=R;i++){
if(i==1)continue;
if(a[i-L]==0)sum++;
}
printf("%lld",sum);
return 0;
}