其他分享
首页 > 其他分享> > < 3 numbers (素数定理&区间筛)

< 3 numbers (素数定理&区间筛)

作者:互联网

< 3 numbers (素数定理&区间筛)

在这里插入图片描述
当区间大于 1000 1000 1000时,显然就输出 Y e s Yes Yes了,否则用区间筛一下即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define fi first
#define se second
#define pb push_back
int p[N],id;
bitset<N>a;
bool jg[N];
void ss(int n){
	a[1]=1;
	for(int i=2;i<=n;i++){
		if(!a[i]) p[++id]=i;
		for(int j=1;j<=id&&p[j]*i<=n;j++){
			a[p[j]*i]=1;
			if(i%p[j]==0) break;
		}
	}
}
int fun(int l,int r){
	int s=0,n=sqrt(r);mst(jg,0);
	for(int i=1;p[i]<=n;i++)
		for(int j=l/p[i]*p[i];j<=r;j+=p[i])
				if(j>=l&&j!=p[i]) jg[j-l]=1;
	for(int i=l;i<=r;i++) if(!jg[i-l]) s++;return s; 
}
int main(){
	ss(N-1);
	int t;scanf("%d",&t);
	while(t--){
		int l,r;scanf("%d%d",&l,&r);
		if(r-l+1>=1000) puts("Yes");
		else {
			puts(fun(l,r)*3<r-l+1?"Yes":"No");
		}
	}
	return 0;
}

标签:jg,int,定理,素数,numbers,区间,Yes,define,1000
来源: https://blog.csdn.net/weixin_45750972/article/details/110943261