#include <iostream>
#include <cmath>
using namespace std;
bool isprime(int n){
if(n==1)return false;
if(n==2||n==3||n==5)return true;
if((n-1)%6==0||(n-5)%6==0){
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
return false;
}
}
}else return false;
return true;
}
int main(){
int n,m;
cin>>n>>m;
int primes[11451];
int cnt=0;
for(int i=1;i<=m;i++){
if(isprime(i)){
primes[cnt]=i;
cnt++;
}
}
for(int i=0;i<n;i++){
int l,r;
cin>>l>>r;
if(r>m||l<1){
cout<<"Crossing the line"<<endl;
}
else{
int left,right;
if(l<=primes[0]){
left=0;
}
else if(l>=primes[cnt-1]){
left=cnt-1;
}
else{
for(int j=0;j<cnt;j++){
if(primes[j]==l){
left=j;
}
if(primes[j]<l&&l<=primes[j+1]){
left=j+1;
break;
}
}
}
if(r>=primes[cnt-1]){
right=cnt-1;
}
else if(r<=primes[0]){
right=0;
}
else{
for(int j=0;j<cnt;j++){
if(primes[j]==r){
right=j;
break;
}
if(primes[j][我趣到底怎么回事我要疯了](https:
right=j;
break;
}
}
}
cout<<right-left+1<<endl;
}
}
}
然后就成了这个样子,好像是对于crossing the line的判定出现了错误。
当我本地输入1 999999 999997 999998时,输出crossing the line
焯