两重for循环,暴力解,没啥好说的
#include <bits/stdc++.h>
using namespace std;
// 判断是否是素数
bool isPrime(int a) {
if(a == 1 || a == 2) return true;
for(int i = 2; i * i <= a; i++) {
if(a % i == 0) {
return false;
}
}
return true;
}
//查找一个偶数最近的两个素数
void findnearestPrime(int a) {
if(a % 2 != 0) {
cout << "Wrong Input" << endl;
return;
}
int minnear = INT_MAX;
int m,n;//记录此刻的i和j的值
for(int i = 1; i < a; i++) {
for(int j = 1; j < a; j++) {
if(i + j > a) break;//此刻往后i+j都是大于a的,没有在循环的意义了
if(isPrime(i) && isPrime(j) && (i + j == a)) {
//确定当前的最小值比之前的小,才记录
if(minnear > max(i - j, j - i)) {
minnear = min(minnear,max(i - j, j - i));
m = i;
n = j;
}
}
}
}
if(minnear == INT_MAX) {
cout << "Wrong! No Answer!" << endl;
return;
}
cout << m << endl << n;
}
int main()
{
int n;
cin >> n;
findnearestPrime(n);
return 0;
}