素数的问题
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。如果输入的整数本身就是素数,则输出该素数本身,距离输出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> using namespace std; ///////////////////////////// // construct the class class number { public: void set_num(); int is_prime(unsigned int); void prime_len(); private: unsigned int num; unsigned int len; }; // give the private variable 'num' a value void number::set_num() { unsigned int a; cout << "Please input a unsigned number:" ; cin >> a; num = a; } // is prime number or not ? int number::is_prime(unsigned int sub_num) { int flag, i; for (i = 2; i < sub_num; i++) { if (sub_num % i == 0) break; } if (i == sub_num) { flag = 1; } else flag = 0; return flag; } // output the shortest position of the prime number void number::prime_len() { int i = 0; int len1, len2; for (i = 0; ; i++) { if (!is_prime(num + i)) continue; else { len1 = i; break; } } for (i = 0; ; i++) { if (!is_prime(num - i)) continue; else { len2 = i; break; } } if (len1 > len2) cout << num - len2 << " " << len2 << endl; else if (len1 == len2) cout << num - len1 << " " << len1 << endl; else cout << num + len1 << " " << len1 << endl; } //////////////////////////////////// // the main entry point //////////////////////////////////// int main(int argc, char *argv[]) { number n; int N; cout << "Please input N:" ; cin >> N; while (N--) { n.set_num(); n.prime_len(); } return 0; }