求助
查看原帖
求助
672632
Betty1236楼主2022/8/30 16:19
#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<cnt;i++){
		cout<<primes[i]<<endl;
	}
	cout<<endl;*/
	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;
					}
				}
			}
			//cout<<left<<endl;
			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://www.luogu.com.cn/record/85509103)<=r&&r<primes[j+1]){
						right=j;
						break;
					}
				}
			}
			//cout<<right<<endl;
			cout<<right-left+1<<endl;
		}
	}
}

然后就成了这个样子,好像是对于crossing the line的判定出现了错误。

当我本地输入1 999999 999997 999998时,输出crossing the line

2022/8/30 16:19
加载中...