题目描述
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000)
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
3
6
8
10
样例输出
5 1
7 1
11 1
#include<iostream>
using namespace std;
int main()
{
int a[10000] = { 0 };
int n = 0;
int left;
int right;
int temp = 0;
int dis = 0;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
for (int j = 0; j < n; j++)
{
left = 1;
right = 0;
temp = 0;
dis = 0;
if (a[j] == 1) {}
else if (a[j] == 2)
{
temp = 2;
dis = 0;
}
else {
for (int i = 2; i <= a[j]; i++)
{
for (int d = 2; d < i; d++)
{
if (i % d == 0)
break;
if (d == i - 1)
left = i;
}
}
for (int i = a[j]; ; i++)
{
for (int d = 2; d < i; d++)
{
if (i % d == 0)
break;
if (d == i - 1)
right = i;
}
if (right == i)
break;
}
if (a[j] - left < right - a[j])
{
temp = left;
dis = a[j] - left;
}
else if (a[j] - left > right - a[j])
{
temp = right;
dis = right - a[j];
}
else
{
temp = left;
dis = a[j] - left;
}
}
cout << temp << " " << dis;
if (j == n - 1) {}
else { cout << endl; }
}
}