c++高手帮忙吧
用c++编写程序
判断一个数是否为可逆素数 若是 再让可逆素数加一后分解为两个素数之和
[解决办法]
- C/C++ code
#include <iostream>#include <string>#include <vector>using namespace std;typedef struct _prime_pair{ int number1; int number2;}prime_pair;bool is_prime(int x) // 判断一个数是否为素数{ if (x == 1) return false; // 1不是素数 bool result = true; for (int i = 2; i * i <= x; i++) { if ( x % i == 0) { result = false; break; } } return result;}bool is_reverse_prime(int x){ int reverse_number = 0; char temp[20] = {0}; if(!is_prime(x)) return false; memset(temp, 0, 20); itoa(x, temp, 10); string str(temp); reverse(str.begin(), str.end()); memset(temp, 0, 20); strcpy(temp, str.c_str()); reverse_number = atoi(temp); if(!is_prime(reverse_number)) return false; return true;}vector<prime_pair> composition(int x){ vector<prime_pair> vpr; ++x; for(int i = 2; i < x; ++i) { if(is_prime(i) && is_prime(x - i)) { prime_pair pp = {i, x - i}; vpr.push_back(pp); } } return vpr;}int main(int argc, char* argv[]){ int number; vector<prime_pair> vpr; while(1) { cin.clear(); cin.sync(); cout << "Please input a number, or enter 0 to quit." << endl; cin >> number; if(number == 0) break; // 如果输入0就退出循环 // 判断是否为素数 if(is_prime(number)) { cout << number << " is a prime number" << endl; // 判断是否为可逆素数 if(is_reverse_prime(number)) { cout << number << " is a reverse prime number" << endl; // 将number + 1拆分为两个素数之和 vpr = composition(number); cout << number << " + 1 = " << number + 1 << " can be composed by the following prime number pairs:" << endl; for(vector<prime_pair>::iterator iter = vpr.begin(); iter != vpr.end(); ++iter) { cout << number + 1 << " = " << iter->number1 << " + " << iter->number2 << endl; } } else { cout << number << " is not a reverse prime number" << endl; } } else { cout << number << " is not a prime number" << endl; } } return 0;}