素数距离问题

来源:互联网 发布:淘宝账号取消实名认证 编辑:程序博客网 时间:2024/06/05 00:51
描述
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.

其中A表示离相应测试数据最近的素数,B表示其间的距离。

样例输入
36810
样例输出

5 17 111 1
#include <stdio.h>#define D 1000004long Array[D];void prime(){  int i,j;  Array[1]=1;  for(i=2;i<D;i++)    if(!Array[i])       for(j=i+i;j<D;j+=i)          Array[j]=1;}int main(){  int N,M,up,down,deltUp,deltDown;  prime();  scanf("%d\n",&N);  while(N--)  {    scanf("%d",&M);    if(Array[M]==0)    printf("%d 0\n",M);    else    {      down=up=M;      while(Array[down]!=0&&down>0)      down-=1;      while(Array[up]!=0)      up+=1;      deltDown=M-down;      deltUp=up-M;      if(down==0)      printf("%d %d\n",up,deltUp);      else if(deltUp>=deltDown)      printf("%d %d\n",down,deltDown);      else      printf("%d %d\n",up,deltUp);    }  }}


原创粉丝点击