相邻素数对(质数筛选)

来源:互联网 发布:windows官方商城 编辑:程序博客网 时间:2024/05/18 02:41

请你求出区间 [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;}





0 0
原创粉丝点击