相邻素数对(质数筛选)

请你求出区间 [l,r] 上距离最近的相邻的素数对和距离最远的相邻的素数对。2,3 是相邻的素数,2,5 不是相邻的素数。距离定义为 2 个素数的差的绝对值。比如 2,3 距离为 1。


输入格式


输入 2 个整数 l,r(1≤l≤r≤9000000)



输出格式


如果 a, b(a < b)是距离最近的素数对,c,d(c < d)是距离最远的素数对,按照如下格式输出

a,b are closest, c,d are most distant.

如果最近或者最远有多对,输出 a 和 c 最小的。如果没有相邻是素数对,输出

There are no adjacent primes.


样例输入1


3 10


样例输出1


3,5 are closest, 3,5 are most distant.


样例输入2

14 17


样例输出2

There are no adjacent primes.


#include <iostream>
#include <cstdio>
using namespace std;

int a[8000005];

int main(){
    for(int i = 0;i < 8000005;i ++){
        a[i] = 1;
    }
    int l,r;

    cin>>l>>r;
    if(l == 1){//1不为质数
        l = 2;
    }
    for(int i = 2;i*i<=r;i ++){//质数筛选
        if(a[i]){
            for(int j = i * i;j <= r;j += i){
                a[j] = 0;
            }
        }
    }

    int flag = 0;//第一次判断时使用.

    int maxx = 0,minn = 0;
    int tempmaxx = 0,tempminn = 0;
    int maxpointx = 0,maxpointy = 0;
    int minpointx = 0,minpointy = 0;
    int temp = 0;
    for(int i = l;i <= r;i ++){
        while(!a[i]&&i<r){
            i ++;
        }
        if(a[i] == 1&&i <= r)
        tempminn = i;
        i++;
        while(!a[i]&&i<r){
            i++;
        }
        if(a[i] == 1&&i <= r)
        tempmaxx = i;

       // cout<<tempminn<<" "<<tempmaxx<<endl;
        if(tempmaxx - tempminn > maxx||!flag){
            flag = 1;
            maxx = tempmaxx - tempminn;
            maxpointx = tempminn;
            maxpointy = tempmaxx;
        }

        if((tempmaxx - tempminn < minn&&tempmaxx - tempminn > 0)||!flag||minn == 0){//需要判断 minn = 0的时候情况
            flag = 1;
            minn = tempmaxx - tempminn;
            minpointx = tempminn;
            minpointy = tempmaxx;
        }
        i --;//要考虑本次的第二个数和下一次第一个数的关系,将其作为第一个数
    }

    if(!minn||!maxx||minpointx == 0||minpointy == 0||maxpointx ==0||maxpointy == 0){
        cout<<"There are no adjacent primes."<<endl;
    }else{
        cout<<minpointx<<","<<minpointy<<" are closest, "<<maxpointx<<","<<maxpointy<<" are most distant."<<endl;
    }

    return 0;
}





猜你喜欢

转载自blog.csdn.net/pack__pack/article/details/71062755
今日推荐