素数距离问题
时间限制: 3000 ms | 内存限制:65535 KB
难度: 2
- 描述
- 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。 如果输入的整数本身就是素数,则输出该素数本身,距离输出0
- 输入
- 第一行给出测试数据组数N(0<N<=10000) 接下来的N行每行有一个整数M(0<M<1000000), 输出
- 每行输出两个整数 A B. 其中A表示离相应测试数据最近的素数,B表示其间的距离。 样例输入
-
36810
样例输出 -
5 17 111 1
#include <iostream>
#include <cmath>using namespace std;bool is_Primer(int x)
{ if(x<2) return false; for(int i=2;i<=sqrt(x);++i) if(x%i==0) return false;return true;
}int main()
{ int n; cin>>n; while(n--) { int x; cin>>x; if(x==1) { cout<<"2"<<" "<<"1"<<endl; continue; } if(x==0) { cout<<"2"<<" "<<"2"<<endl; continue; } if(is_Primer(x)) { cout<<x<<" "<<"0"<<endl; continue; } int left; for(int i=x-1;i>1;--i) if(is_Primer(i)) { left=i; break; } int right; for(int i=x+1;;++i)//不要加循环终止条件,因为题目没有说最小的值是多少,加了就wronganswer。。。一个大神给我指导的, if(is_Primer(i)) { right=i; break; } if(right-x<x-left) cout<<right<<" "<<right-x<<endl; else if(right-x>=x-left) cout<<left<<" "<<x-left<<endl; } return 0;}