素数距离问题
时间限制:3000 ms | 内存限制:65535 KB
难度:2
- 描述
- 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出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 <bits/stdc++.h> using namespace std; typedef long long ll; const int INF = 0x3f3f3f3f; const int moder = 10000; const int maxn = 1100000; int main() { map<int,int>mp; for(int i=2;i*i < maxn;i++) { if(mp[i] == 0) { for(int j=i*2;j < maxn;j = j+i) { mp[j] = 1; } } } int t; cin >> t; while(t--) { int m; cin >> m; if(m == 1) { cout << "2 1" << endl; continue; } int flag1 = 0; for(int i=m;i < maxn;i++) { if(mp[i] == 0) { flag1 = i; break; } } int flag2 = 0; for(int i=m;i > 1;i--) { if(mp[i] == 0) { flag2 = i; break; } } if(flag1 - m < m - flag2) { cout << flag1 << " " << flag1-m << endl; } else{ cout << flag2 << " " << m-flag2 << endl; } } return 0; }
——本想刷刷水题放松心情,结果采坑了,记住1和0既非素数也非合数!