素数距离问题
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0-
输入
-
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
-
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
-
3 6 8 10
样例输出
-
5 1 7 1 11 1
来源
- 经典题目 上传者
01.
#include<stdio.h>
02.
#include<math.h>
03.
int
sushu(
int
x)
04.
{
int
s;
05.
for
(s=2;s<=
sqrt
(1.0*x);s++)
06.
{
07.
if
(x%s==0)
08.
return
0; }
09.
10.
return
1; }
11.
int
main()
12.
{
int
n,m;
13.
int
i,j=0,a1,a2;
14.
scanf
(
"%d"
,&n);
15.
while
(n--)
16.
{
scanf
(
"%d"
,&m);
17.
if
(m==1)
18.
{
printf
(
"2 1\n"
);
19.
continue
; }
20.
for
(i=m;i>1;i--)
21.
{ j=sushu(i);
22.
if
(j==1)
23.
{ a1=i; j=0;
break
; }
24.
}
for
(i=m;;i++)
25.
{ j=sushu(i);
26.
if
(j==1)
27.
{ a2=i; j=0;
break
; }
28.
}
29.
if
(a1==m&&a2==m)
30.
printf
(
"%d %d\n"
,m,a1-m);
31.
else
32.
if
(m-a1<=a2-m)
33.
printf
(
"%d %d\n"
,a1,m-a1);
34.
else
35.
printf
(
"%d %d\n"
,a2,a2-m); }
36.
return
0;}
-
第一行给出测试数据组数N(0<N<=10000)