• 小学数学题


    题目描述:
     一日,某小学生问作业:“将16分解为若干素数的和,求这些素数积的最大值”。不禁被吓了一跳。怎么小学生的数学题变得这么难了?
      细细询问,小学生没学不等式,没学数学归纳法……。那么只能用最笨的办法——穷举,一个个地试的办法来解决。
      穷举之道,在于一一举来,不多不少;而不多不少,则在于有条有理,从容不乱。
     
    解决方案1(暂只看到这个):
     
    1. 由A-G不等式:n个数的算数平均值>=n个数的几何平均值:
    (a1+a2+a3+....+an)/n >=(a1*a2*a3*...*an)^(1/n).
    等号仅在a1=a2=...=an取得。在和相等的情况下,原命题变为
    求(16/n)^n 的最值问题,当然16可以是任意的。可以得到 n=16/e (e=2.71828) 最大。
    求导我自己推理过,恰好网上也有这个部分,链接http://blog.csdn.net/pathuang68/article/details/6606605

    2. 以上求导过程值说明了(16/x)^x在何处最大,讨论整数情况时,要考虑上向上取整还是向下取整,例如16/e=5.88. 可以取5或者6.此时可以求两阶导数(= -1/x),当然直接数学验证也可以,可知取6最大。

    3. 再考虑分解为素数16/6=2.7,距离2.7最近的素数为3.其实无论是16还是17,距离解出来最近的数字都是3.
    所以如果一个数恰好为3的倍数,则分解成3xn是的成绩最大=3^n. 如果不能分解为3的倍数,考虑余数为1或者2. 余数为1时,考虑2x2 >3x1,即3n+1型分解为3(n-1)+2+2,乘积=3^(n-1)*4;3n+2型,最值=3^n*2.

    4.写code的时候,依据以上结论,将是很简单的。不是我懒,是我代码太丑了。。。。。

    int MaxProduct (int n)
    {
    if(n==0 || n==1 || n==2)
    return n;
    if(n%3==1)
    return power(3,(n-4)/3)*2*2;
    if(n%3==2)
    return power(3,(n-2)/3)*2;
    return power(3,n/3);
    }
     
  • 相关阅读:
    Anaconda下载及安装教程
    机器学习之一元线性回归模型
    PyCharm下载及安装教程
    Python基础之数据类型、变量、常量
    新旧代码的兼容(c和c++)
    埃拉托斯特尼--筛法 c++求质数,用bitset类型
    使用预处理器进行调试
    刷题-网易2018实习生招聘笔试题
    深度优先搜索-DFS遍历图-C++
    图--邻接矩阵c++
  • 原文地址:https://www.cnblogs.com/drawwindows/p/3213979.html
Copyright © 2020-2023  润新知