7827:质数的和与积
总时间限制: 1000ms 内存限制: 65536kB
【描述】
两个质数的和是S,它们的积最大是多少?
【输入】
一个不大于10000的正整数S,为两个质数的和。
【输出】
一个整数,为两个质数的最大乘积。数据保证有解。
【样例输入】
50
【样例输出】
589
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
#include <iostream>
//#include<math.h> //如果使用平方根函数sqrt(),添加
using namespace std;
int prime(int x) //判断是否是质数,是返回1,不是返回0
{
if(x==1)
return 0; //1不是质数,返回0
for(int i=2;i<x;i++) //判断是否是质数最直观和简单的方法就是从2开始直接除,能除尽(余数为0)就不是质数。
//for(int i=2;i<=sqrt(x);i++) //优化算法
if(x%i==0)
return 0; //能除尽(余数为0)就不是质数,返回0
return 1; //剩下的都是质数了
}
int main()
{
int s;
cin>>s; //输入两个质数的和S
int max=0; //设置最大值max,设初值为0
for(int i=2;i<=s-2;i++) //两个质数中的其中一个质数从2开始,循环枚举
if(prime(i)==1 && prime(s-i)==1) //两个质数中的其中一个质数为i,那么另一个质数为s-i,要求它们是质数
{
if(i*(s-i)>max)
max=i*(s-i); //两个质数积的最大值
}
printf("%d",max);
return 0;
}
运行结果:
参考https://blog.youkuaiyun.com/zqwang/article/details/79383193
https://blog.youkuaiyun.com/serena_0916/article/details/55044832