两个数的和是S,他们积最大是多少
输入 50 输出 589
#include<iostream>
#include<vector>
#include<cmath>
#include<set>
#include<algorithm>
using namespace std;
bool Prime(vector<int> a, int X)
{
int x = sqrt(X);
for (size_t i = 0; i < a.size(); ++i){
if (X%a[i] == 0){
return false;
}
else if (a[i]>x){
break;
}
}
return true;
}
int main()
{
int N;
cin >> N;
vector<int> a;
a.push_back(2);
a.push_back(3);
for (int i = 4; i < N; ++i){
if (Prime(a,i)){
a.push_back(i);
}
}
int Max = 0;
set<int> b(a.begin(), a.end());
auto it = upper_bound(b.begin(), b.end(), N / 2);
for (; it != b.begin();--it){
auto it1 = b.find(N - *it);
if (it1 != b.end()){
if ((*it)*(N - *it)>Max){
Max = (*it)*(N - *it);
}
}
}
if (it == b.begin() && ( b.find(N - *it)!=b.end())){
if ((*it)*(N - *it)>Max){
Max = (*it)*(N - *it);
}
}
cout << Max << endl;
system("pause");
return 0;
}