素数距离问题
2018-03-29 20:03
323 查看
素数距离问题
描述现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。
如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入3
6
8
10
样例输出5 1
7 1
11 1思路分析:
首先要写出一个判断是不是素数的函数来方便判读素数,其次就是当输入的这个数不是素数的时候怎么来获得这个数左右两边离得最近的素数,之后再从左右距离来确定输出,具体方法看代码: 代码不难就不注释了....
#include<iostream> #include<math.h> using namespace std; bool judgePrime(int number){ if(number==1){ return false; } for(int i=2;i< 4000 ;sqrt(number)+1;i++){ if(number%i==0){ return false; } } return true; } int main(){ int times; cin>>times; while(times--) { int left_Number; int right_Number; int left_Length; int right_Length; int length; int number; cin>>number; if(number==1){ length=1; cout<<2<<" "<<length<<endl; }else if(number==2){ cout<<2<<" "<<0<<endl; }else if(judgePrime(number)){ length=0; cout<<number<<" "<<length<<endl; }else{ for(left_Number=number;left_Number>=1;left_Number--){ if(judgePrime(left_Number)){ left_Length=number-left_Number; break; } } for(right_Number=number;;right_Number++){ if(judgePrime(right_Number)){ right_Length=right_Number-number; break; } } if(left_Length<=right_Length){ cout<<left_Number<<" "<<left_Length<<endl; }else{ cout<<right_Number<<" "<<right_Length<<endl; } } } return 0; }