1 /*描述 2 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。 3 如果输入的整数本身就是素数,则输出该素数本身,距离输出0 4 输入 5 第一行给出测试数据组数N(0<N<=10000) 6 接下来的N行每行有一个整数M(0<M<1000000), 7 输出 8 每行输出两个整数 A B. 9 其中A表示离相应测试数据最近的素数,B表示其间的距离。 10 样例输入 11 3 12 6 13 8 14 10 15 样例输出 16 5 1 17 7 1 18 11 1*/ 19 #include<stdio.h> 20 int main() 21 { 22 int N; 23 scanf("%d",&N); 24 while(N --) 25 { 26 int x , i , j , n , m; 27 int f(int a); 28 scanf("%d",&x); 29 if(x == 1) 30 { 31 printf("2 1\n"); 32 continue; 33 } 34 if( f( x ) ) 35 { 36 printf("%d 0\n",x); 37 continue; 38 } 39 for(i = x + 1 ; ;i++) 40 { 41 if(f ( i ) ) 42 { 43 n = i - x; 44 break; 45 } 46 } 47 for(j = x - 1; ;j--) 48 { 49 if(f ( j ) ) 50 { 51 m = x - j; 52 break; 53 } 54 } 55 if(m <= n) 56 printf("%d %d\n",j,m); 57 else 58 printf("%d %d\n",i,n); 59 } 60 return 0; 61 } 62 #include<math.h> 63 int f(int a)//素数 64 { 65 int i; 66 if(a < 2) 67 return 0; 68 for(i = 2 ; i <= sqrt(a) ; ++i) 69 if(a % i == 0) 70 return 0; 71 return a; 72 }