素数距离问题

描述

  现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0

输入
  第一行给出测试数据组数N(0<N<=10000)
  接下来的N行每行有一个整数M(0<M<1000000)
输出
  每行输出两个整数 A B.
  其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
3
6
8
10

样例输出

5 1
7 1
11 1

测试代码

 1 #include <stdio.h>
 2 
 3 int isPrime(int num)
 4 {
 5     int i;
 6     if (num == 2)
 7     {
 8         return 1;
 9     }
10     if (!(num & 1) || num < 2)
11     {
12         return 0;
13     }
14     for (i = 3; i * i <= num; i += 2)
15     {
16         if (num % i == 0)
17         {
18             return 0;
19         }
20     }
21     return 1;
22 }
23 
24 int main()
25 {
26     int n, m, leftNum, rightNum, leftDis, rightDis;
27     scanf("%d", &n);
28     while (n--)
29     {
30         scanf("%d", &m);
31         if (isPrime(m))
32         {
33             printf("%d 0\n", m);
34         }
35         else
36         {
37             leftNum = rightNum = m;
38             //求出m左边最大的素数
39             while (!(isPrime(leftNum)) && leftNum > 0)
40             {
41                 leftNum--;
42             }
43             leftDis = m - leftNum;
44             //求出m右边最小的素数
45             while (!(isPrime(rightNum)))
46             {
47                 rightNum++;
48             }
49             rightDis = rightNum - m;
50             
51             if (leftNum == 0)    //左边没找到
52             {
53                 printf("%d %d\n", rightNum, rightDis);
54             }            
55             else if (leftDis <= rightDis)    //输出距离小的,左右相等则输左
56             {
57                 printf("%d %d\n", leftNum, leftDis);
58             }
59             else
60             {
61                 printf("%d %d\n", rightNum, rightDis);
62             }
63         }        
64     }        
65     return 0;
66 }

 

posted @ 2016-05-10 16:16  新生代黑马  阅读(177)  评论(0)    收藏  举报