#include<bits/stdc++.h>
using namespace std;
const int MAXN=1000002;
int judge[MAXN]={};
int sum[MAXN]={};
int main()
{
freopen("in.txt","r",stdin);
int n,m;cin>>n>>m;
judge[1]=1;sum[1]=0;
for(int i=2;i<=m;i++){
for(int j=2;j*i<=m;j++){
judge[j*i]=1;//j*i毫无疑问都是非质数,有点像打表
}
if(judge[i]==0) sum[i]=sum[i-1]+1;
else sum[i]=sum[i-1];//区间质数数组构造
}
for(int i=1;i<=n;i++){
int a,b;cin>>a>>b;
if(a<1||b<1||a>m||b>m)
cout<<"Crossing the line"<<endl;
else cout<<sum[b]-sum[a-1]<<endl;//这里左边界注意是a-1
}
return 0;
}
质数区间求和算法
本文介绍了一种高效的算法,用于解决在特定区间内求质数数量的问题。通过预先筛选并标记非质数,该算法能在O(1)时间内响应任意区间内的质数计数请求。适用于数学竞赛和算法挑战等场景。
300

被折叠的 条评论
为什么被折叠?



