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