如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
接下来的N行每行有一个整数M(0<M<1000000),
输出
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
3 6 8 10
样例输出
5 1 7 1 11 1依次从一个数开始往两边查找,第一个数为素数或者小与2结束查找,查找完毕比较距离就行了此外还需要考虑左边没有素数的情况
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int f(int n){
int i;
if(n==1) return 0;
for(i=2;i<=sqrt(n);i++){
if(n%i==0){
return 0;
break;
}
}
return 1;
}
int main()
{
int n,num,numUp,numDown,deltUp,deltDown;
scanf("%d",&n);
while(n--)
{
scanf("%d",&num);
if(f(num))//本身是素数,后面就不用了
printf("%d 0\n",num);
else
{
numUp=numDown=num;
while(!f(numUp))
{
numUp+=1;
}
while(!f(numDown)&&numDown>0)//边界条件,否则不能通过
{
numDown-=1;
}
deltUp = numUp-num;
deltDown = num-numDown;
if(numDown==0)//特殊情况:左边没有找到
printf("%d %d\n",numUp,deltUp);
else if(deltUp>=deltDown)//输出距离小的, 相等则左
printf("%d %d\n",numDown,deltDown);
else
printf("%d %d\n",numUp,deltUp);
}
}
//system("PAUSE");
return 0;
}