小学奥数 质数的和与积

要用到一个基本的均值不等式:(a+b)^2>=4*a*b 很好证明,把4ab移到左侧,完全平方打开,然后合并。等号在a=b时成立。所以可以知道,和一定的两个数,越接近乘积越大。所以从S/2开始向两端枚举即可。O(n*sqrt(n))

  当然还有一种简单的方法先用筛法筛出数据范围内的素数,枚举时直接判断即可O(n)

#include<iostream>
#include<cstdio>
using namespace std;
int n;
inline int pd(int x)
{
    for(int i=2;i*i<=x;i++)
      if(x%i==0) return 0;
    return 1;
}
int main()
{
    scanf("%d",&n);
    for(int i=n/2;i>=2;i--)
      if(pd(i)&&pd(n-i)){
          printf("%d",i*(n-i));
          return 0;
      }
}
posted @ 2015-10-27 07:37  Martrix99  阅读(1237)  评论(0编辑  收藏  举报