【数论】A%B Problem luogu-1865

题目描述

让你输出区间内的素数的个数

分析

预处理筛法,在随便搞一下就好了。

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\n");
		else printf("%d\n",sum[r]-sum[l-1]);
	}
	return 0;
}

posted @ 2018-09-19 22:08  dawnstar  阅读(179)  评论(0编辑  收藏  举报