原题地址
素数距离问题
- 描述
- 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出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 <iostream> 2 #include<cmath> 3 using namespace std; 4 5 bool IsPrime(int n) 6 { 7 if(n<2) 8 return false; 9 for (int i=2; i<=sqrt(n); i++) 10 { 11 if (n%i==0) 12 { 13 return false; 14 } 15 } 16 return true; 17 } 18 19 int main() 20 { 21 int n,m,m1,m2; 22 cin>>n; 23 while(n--) 24 { 25 cin>>m; 26 if(IsPrime(m)) 27 { 28 cout<<m<<" 0"<<endl; 29 continue; 30 } 31 if(m==1) 32 { 33 cout<<"2 1"<<endl; 34 continue; 35 } 36 m1=m2=m; 37 while(m1--) 38 { 39 if(IsPrime(m1)) 40 break; 41 } 42 while(m2++) 43 { 44 if(IsPrime(m2)) 45 break; 46 } 47 if((m-m1)<=(m2-m)) 48 cout<<m1<<" "<<m-m1<<endl; 49 else 50 cout<<m2<<" "<<m2-m<<endl; 51 } 52 return 0; 53 }