题目描述
让你输出区间内的素数的个数
分析
预处理筛法,在随便搞一下就好了。
AC代码
#include <bits/stdc++.h>
using namespace std;
#define ms(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const int maxn=1000005;
int sum[maxn],vis[maxn];
inline int read(){
int X=0,w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
return w?-X:X;
}
void Prime(int n) {
sum[1]=0;
vis[1]=1;
for (int i=2;i<=n;i++) {
if (!vis[i]) {
sum[i]=sum[i-1]+1;
for (int j=i+i;j<=n;j+=i) vis[j]=1;
}
else sum[i]=sum[i-1];
}
}
int main(int argc,char* argv[]){
ms(vis,0);
int n=read(),m=read();
Prime(m);
for (int i=1;i<=n;i++) {
int l=read(),r=read();
if (l<1||r>m) printf("Crossing the line
");
else printf("%d
",sum[r]-sum[l-1]);
}
return 0;
}