任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对
譬如:输入20 ,输出 7 13
C++代码:
最坏时间复杂度:O(n^2) ,空间复杂度:O(1)
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
vector<int> minDiffPrimePair(int num){
vector<int> ret;
int mid = num / 2;
int i=mid-1, j=mid+1;
if (isPrimeNum(mid)){
ret.push_back(mid);
ret.push_back(mid);
return ret;
}
while (i > 1 && j < num){
while (!isPrimeNum(i))
i--;
while (!isPrimeNum(j))
j++;
if (i + j == num){
ret.push_back(i);
ret.push_back(j);
return ret;
}
else if (i + j < num)
j++;
else
i--;
}
return ret;
}
bool isPrimeNum(int num){
for (int i = 2; i < num; i++){
if (num%i == 0)
return 0;
}
return 1;
}
};
int main(){
Solution so;
int num;
cin >> num;
vector<int>ret;
ret = so.minDiffPrimePair(num);
cout << ret[0] << endl;
cout<< ret[1];
system("pause");
return 0;
}