- 描述
- 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。如果输入的整数本身就是素数,则输出该素数本身,距离输出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<stdio.h>
02.
#include<math.h>
03.
int
main()
04.
{
05.
int
i,j,m,n,a,b,t,k,d;
06.
scanf
(
"%d"
,&m);
07.
while
(m--)
08.
{
09.
scanf
(
"%d"
,&n);
10.
for
(i=n-1;i>=2;i--)
11.
{
12.
t=1;
13.
for
(j=2;j<=
sqrt
(i);j++)
14.
{
15.
if
(i%j==0){t=0;
break
;}
16.
}
17.
if
(t)
break
;
18.
}
19.
a=i;
20.
for
(i=n+1;i;i++)
21.
{
22.
t=1;
23.
for
(j=2;j<=
sqrt
(i);j++)
24.
{
25.
if
(i%j==0){t=0;
break
;}
26.
}
27.
if
(t)
break
;
28.
}
29.
b=i;
30.
k=(n-a)<=(b-n)?a:b;
31.
d=(n-a)<=(b-n)?(n-a):(b-n);
32.
t=1;
33.
for
(i=2;i<=
sqrt
(n);i++)
34.
{
35.
if
(n%i==0)
36.
{t=0;
break
;}
37.
}
38.
if
(n==1)
printf
(
"2
1\n"
);
39.
else
40.
printf
(
"%d
%d\n"
,t>0?n:k,t>0?0:d);
41.
}
42.
return
0;
43.
}