素数距离问题

来源:互联网 发布:淘宝仓管的职责 编辑:程序博客网 时间:2024/06/06 05:36

素数距离问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:2
描述
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
36810
样例输出
5 17 111 1
#include <bits/stdc++.h>using namespace std;#define N 1000010bool prime[N];int main(){    int i,j,t,n,b,a;    prime[2]=true;//筛选法求素数    for(i=3;i<N;i++)    {        if(i%2)            prime[i]=true;    else        prime[i]=false;    }    for(i=3;i<=sqrt(N);i++)        {            if(prime[i])            for(j=i+i;j<N;j=j+i)            prime[j]=false;        }    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        i=n;        while(1)        {            if(prime[i])//左方向            {                a=n-i;                break;            }            i--;        }        j=n;        while(1)        {            if(prime[j])//右方向            {                b=j-n;                break;            }            j++;        }        if(b<a)            printf("%d %d\n",j,b);        else            printf("%d %d\n",i,a);    }    return 0;}