素数距离问题

描述

现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出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 #include <string.h>
 3 #define N 1000010 //此题的关键在于你素数标记数组要开大一些,保证往上找素数的时候可以找到需要的素数 
 4 
 5 int flag[N];
 6 
 7 int main(){
 8     int i;
 9     int j;
10     int T;
11     int number;
12     int temp;
13     
14     int result;
15     int distance;
16     
17     memset(flag,0,sizeof(int)*N);
18     flag[0]=1;
19     flag[1]=1;
20     
21     for(i=2;i*i<N;i++){
22         if(flag[i]==0){
23             for(j=i*i;j<N;j+=i){
24                 flag[j]=1;
25             } 
26         }
27     }
28     
29     scanf("%d",&T);
30     
31     while(T--){
32         scanf("%d",&number);
33         
34         temp=number;
35         while(1){
36             if(flag[temp]==0){
37                 result=temp;
38                 distance=number-temp;
39                 break;
40             }
41             temp--;
42         }
43         
44         temp=number;
45         while(1){
46             if(flag[temp]==0){
47                 if(temp-number<distance){
48                     distance=temp-number;
49                     result=temp;
50                 }
51                 break;
52             }
53             temp++;
54         }
55         
56         printf("%d %d
",result,distance); 
57     }
58     
59     
60     
61     
62     return 0;
63 }
原文地址:https://www.cnblogs.com/zqxLonely/p/4095892.html