• 求划分因子乘积最大的一个划分及此乘积


    求划分因子乘积最大的一个划分及此乘积
      问题简述:给定一个正整数n, 则在n所有的划分中, 求因子乘积最大的一个划分及此乘积。例如:8 = {8}, {7, 1}, {6, 2}, {5, 3}, {4, 4}, {3, 3, 2}, {2, 2, 2, 2} 等,那么在这些当中,3 * 3 * 2 的乘积最大,所以输出整个划分
    和这个乘积 18。

      算法分析:这是我在某个论坛上看到的问题,以及别人针对此问题的数学分析,现简单的整理如下:   (1)对于任意大于等于4的正整数m, 存在一个划分m = m1+m2, 使 m1*m2 >= m证: 令m1 = int(m/2), 则 m1 >= 2 , m2 = m-m1; 那么m2 > 2,并且 m2 >= m/2 >= m1; m1*m2 >= 2*m2 >= m; 证毕;

    该证明简单的来说就是:对于一个大于等于4的正整数m,存在一个2块划分的因子,这两个因子的乘积总是不小于原数m本身。   (2)由(1)知此数最终可以分解为 2^r * 3^s。现证明 r <= 2;   证:若r > 2, 则至少有3个因子为2, 而2*2*2 < 3*3;   所以可以将3个为2的因子,换为两个因子3;积更大;证毕。   综合(1),(2),则有:任何大于4的因子都可以有更好的分解, 而4可以分解为2*2。   所以:此数应该分解为 2^k1 * 3^k2。而且可以证明 k1>=0 并且 k1 <= 2,因此:    A.当n = 3*r 时, 分解为 3^r    B.当n = 3*r+1时, 分解为 3^(r-1)*2*2   C.当n = 3*r+2时, 分解为 3^r*2   **剩下编程处理,那就是太简单了,首先是处理 <= 4的特殊情况,再对>4的情况进行模3的3种情况的判断,最后一一输出。可见,数学在整数划分问题上有太强的功能。谁叫这个问题叫整数划分呢,不与数学密切才怪! **

  • 相关阅读:
    一个简短的yahoo YUI介绍
    备忘录
    海量数据库查询
    asp.net webshell 解决 方案
    IE=EmulateIE7 标签的作用
    WINDOWS 2003 IIS网站防木马权限设置安全配置整理
    C语言各种函数
    虚函数的各种情况
    equals与==关于Object覆盖和重载问题
    类型转换函数转换为构造类型
  • 原文地址:https://www.cnblogs.com/Roni-i/p/9057892.html
Copyright © 2020-2023  润新知