两个质数的和是S,他们的积最大是多少?
输入格式
一个不大于10000的正整数S,为两个质数的和。
输出格式
一个整数,为两个质数的最大乘积。数据保证有解。
输入样例
21
输出样例
38
分析
从 s/2s/2 开始向下枚举 aa ,判断 aa 以及 s−as−a 是否同为质数,是则直接输出 a×(s−a)a×(s−a)
参考答案
(1)
#include<bits/stdc++.h>
using namespace std;
bool zs(int n) {
int i=2;
while(i<=floor(sqrt(n))&&(n%i!=0))
i++;
if(i>floor(sqrt(n)))
return true;
return false;
}
int main() {
int i,S,max=-1;
cin>>S;
for(i=2; i<=S; i++) {
if(zs(i)&&zs(S-i)) {
if(max<i*(S-i))max=i*(S-i);
}
}
cout<<max;
return 0;
}
(2)
#include<bits/stdc++.h>
using namespace std;
bool zs(int n) {
int i = 2;
while(i <= floor(sqrt(n)) and (n % i != 0))
i++;
if(i > floor( sqrt(n) ))
return true;
return false;
}
int main() {
int i ,S ,max = -1;
cin >> S;
for(i = 2; i <= S; i++) {
if(zs(i) and zs(S - i)) {
if(max < i * (S - i))
max = i * (S - i);
}
}
cout << max;
return 0;
}