-
描述
-
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0-
输入
-
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
-
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
-
3 6 8 10
样例输出
-
5 1 7 1 11 1
-
第一行给出测试数据组数N(0<N<=10000)
代码:
01.
#include<math.h>
02.
#include<iostream>
03.
using
namespace
std;
04.
#include<stdio.h>
05.
int
jud(
int
n)
06.
{
07.
int
m=1,i;
08.
for
(i = 2;i <=
sqrt
(n);i++)
09.
if
(n%i==0)
10.
m= 0;
11.
return
m;
12.
13.
}
14.
int
main()
15.
{
16.
int
t;
17.
scanf
(
"%d"
,&t);
18.
while
(t--)
19.
{
20.
int
s,x=0,y=0,i;
21.
scanf
(
"%d"
,&s);
22.
if
(s==1)
23.
//printf("%d+1 1\n",s);
24.
cout<<s+1<<
" "
<<
"1"
<<endl;
25.
else
26.
{
27.
if
(jud(s)!=0)
28.
//printf("%d 0\n",s);
29.
cout<<s<<
" "
<<
"0"
<<endl;
30.
else
31.
{
32.
for
(x = s+1;;x++)
33.
if
(jud(x)==1)
34.
break
;
35.
for
(y = s-1;;y--)
36.
if
(jud(y)==1)
37.
break
;
38.
if
(x-s >= s-y)
39.
//printf("%d %d\n",y,s-y);
40.
cout<<y<<
" "
<<s-y<<endl;
41.
else
42.
//printf("%d %d\n",x,x-s);
43.
cout<<x<<
" "
<<x- s<<endl;
44.
}
45.
46.
}
47.
48.
}
49.
return
0 ;
50.
}