描述现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0- 输入
- 第一行给出测试数据组数N(0<N<=10000) 接下来的N行每行有一个整数M(0<M<1000000), 输出
- 每行输出两个整数 A B. 其中A表示离相应测试数据最近的素数,B表示其间的距离。 样例输入
-
36810
样例输出 -
5 17 111 1
#include<iostream>
#include<cmath>#include<cstdio>#include<cstring>using namespace std;#define MAX 1000010int prime[MAX];void Primes()
{ int i,j; memset(prime,0,sizeof(prime));prime[2]=1;
for(i = 3;i <= MAX;i++) { if(i % 2 == 0) { prime[i] = 0; } else { prime[i] = 1; } } for(i = 3;i <= sqrt(MAX);i+=2) { if(prime[i]) { for(j = i+i;j <=MAX;j += i) { prime[j] = 0; } } } }int main(int argc, char* argv[]){ int k; Primes(); prime[0]=0; prime[1]=0; scanf("%d",&k); while(k--) { int n; int x,y; x=0; y=0; scanf("%d",&n); if(prime[n]) { printf("%d %d\n",n,n-n); } else { x=n-1; y=n+1; while(prime[x]==0&&x>=0) { x--; } while(prime[y]==0) { y++; } if(x<0) { printf("%d %d\n",y,y-n); } else if(n-x<=y-n) { printf("%d %d\n",x,n-x); } else { printf("%d %d\n",y,y-n); } } } return 0;}