#include<iostream>
#include<cstdio>
#include<cmath>
int n;
long long l,r;
using namespace std;
int main()
{
while(scanf("%d",&n) !=EOF){
while(n--){
cin>>l>>r;
if(l>r)
swap(l,r);
int x=0;
for(int i=l;i<=r;i++){
int m=0;
for(int j=2;j<=sqrt(i);j++){
if(i%j==0)
m+=1;
}
if(!m)
x+=1;
else
continue;
}
if(double(x)/(r-l+1)<(double(1)/3))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
return 0;
}
运算量过大,超出时间限制
1到 n 的质数个数数量级在n/ ln n,由质数的稀疏性,可以验证当区间长度大于100时答案一定是 Yes 了,而小于100时直接枚举就很简单了:
#include<iostream>
#include<cstdio>
#include<cmath>
int n;
long long l,r;
using namespace std;
int main()
{
while(scanf("%d",&n) !=EOF){
while(n--){
cin>>r>>l;
if(l>r)
swap(l,r);
if(r-l+1>100){
cout<<"Yes"<<endl;
}
else{
int x=0;
for(int i=l;i<=r;i++){
int m=0;
for(int j=1;j<=floor(sqrt(i));j++){
if(i%j==0)
m+=1;
}
if(m==1)
x+=1;
}
if(3*x<(r-l+1))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
}
return 0;
}