代码
#include<bits/stdc++.h>
using namespace std;
bool pp[400000],p[10000010];
void fp(long long,long long);
int num=0;
int main(){
long long n,m;
cin>>n>>m;
fp(n,m);
cout<<num;
return 0;
}void fp(long long a,long long b){
long long k=ceil(sqrt(a));
for(int i=2;i<=k;i++){ //找出小于根号 a 的所有素数
if(!pp[i]){
for(int j=i*2;j<=k;j+=i)
pp[j]=1;
}
}//for(int i=2;i<=k;i++)cout<<pp[i]<<" ";cout<<endl;
for(int i=2;i<=k;i++){ //初步筛选所求区间中的素数
if(!pp[i]){
long long j=a;while(j%i!=0)j++;
for(;j<=b;j+=i)if(j!=i)p[j-a]=1;
//for(long long i=a;i<=b;i++)cout<<p[i-a]<<" ";cout<<endl;
}
}if(a==1)a=2;//特判 a = 2 的情况
for(long long i=a;i<=b;i++){
if(!p[i-a]){
num++; //计数器加一
for(long long j=i*2;j<=b;j+=i)p[j-a]=1;
}
}
}
求大佬指导