< 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