题目描述
两个质数的和是 S,它们的积最大是多少?
输入格式
一个不大于10000 的正整数 S,为两个质数的和。
输出格式
一个整数,为两个质数的最大乘积。数据保证有解。
输入输出样例
输入 #1
50
输出 #1
589
源代码
#include <bits/stdc++.h>
using namespace std;
int s,sum=-1;
bool pd(int x) //判断数x是否为素数
{
bool flag=1;
for(int i=2;i<x;i++)
{
if(x%i==0) flag=0;
}
if(flag==1) return 1;
else if(flag==0) return 0;
}
void dfs(int num)
{
if(num>s/2) return;
if(pd(num)==1 && pd(s-num)==1) //判断两个数是否都是素数
{
int n=num*(s-num);
if(n>sum) sum=n; //保存乘积的最大值
}
dfs(num+1);
}
int main()
{
cin>>s;
dfs(2);
cout<<sum<<endl;
return 0;
}
测试点信息
总结
通过从2遍历到s/2(因为是2个数,即任意1个数都不超过s/2,如果从2到s,会太浪费时间), 找出符合条件的数对,再通过比较找出最大的一组并输出.