两个质数的和是S,它们的积最大是多少?
Input
一个不大于10000的正整数S,为两个质数的和。
Output
一个整数,为两个质数的最大乘积。数据保证有解。
Sample Input
50
Sample Output
589
#include <stdio.h>
#include <math.h>
int Iszs(int n)
{
int i=2;
while(i<=floor(sqrt(n))&&(n%i!=0)) //floor为向下取整函数,sqrt()求平方根
i++;
if(i>floor(sqrt(n)))//若是因为i大于n的平方根而跳出循环,则说明n为质数
return 1;
return 0;
}
int main()
{
int n;
int max=-1;
scanf("%d", &n);
for(int i=2;i<n;i++){
if(Iszs(i)&&Iszs(n-i)){
if(max<i*(n-i))
max=i*(n-i);
}
}
printf("%d\n",max);
return 0;
}
题解:
根据简单的数学原理,两个数的和为S,二者之差越小,则乘积越大。所以要找两个和为S的数字的最大乘积,我们从S/2附近开始找。如果S/2恰能整除,并且S/2是个质数,S/2*S/2就是结果。如果不是,我们再试(S/2)+1与(S/2)-1是否为质数,以此直到试