整数划分结论

给定一个正整数n, 则在n所有的划分中, 求因子乘积最大的一个划分及此乘积。
Tip:1作因数,则显然乘积不会最大
14 = {14}, {13, 1}, {12, 2}, {12, 1, 1}, {11, 3}, {11, 2, 1}, {11, 1 , 1, 1}, {10, 4}, {10, 3, 1}, { 10, 2, 1,1}, {10,1,1,1}…… {3,3,3,3,2},{3, 3, 3, 3, 1, 1,},{2, 2, 2, 2} 等,那么在这些当中,3*3 *3 *3 *2 的乘积最大,所以输出整个划分和这个乘积 162。

(1) 对于任意大于等于4的正整数m, 存在一个划分m = m1+m2, 使 m1m2 >= m证: 令m1 = int(m/2), 则 m1 >= 2 , m2 = m-m1;
那么m2 > 2,并且 m2 >= m/2 >= m1; m1m2 >= 2m2 >= m; 证毕;

该证明简单的来说就是:对于一个大于等于4的正整数m,存在一个2块划分的因子,这两个因子的乘积总是不小于原数m本身。

(2) 由(1)知此数最终可以分解为 2^r 3^s。现证明 r <= 2;
  证:若r > 2, 则至少有3个因子为2, 而222 < 3*3;
  所以可以将3个为2的因子,换为两个因子3;积更大;证毕。

综合(1),(2),则有:任何大于4的因子都可以有更好的分解, 而4可以分解为2*2。

所以:此数应该分解为 2^k1 * 3^k2。而且可以证明 k1>=0 并且 k1 <= 2,因此:
   A.当n = 3r 时, 分解为 3^r
   B.当n = 3r+1时, 分解为 3^(r-1)* 2 *2
  C.当n = 3r+2时, 分解为 3^r2
  编程,首先是处理 <= 4的特殊情况,再对>4的情况进行模3的3种情况①的判断,最后一一输出。

①解释:

  1. n = 14, n%3 == 2,n被3整除后留下一个2,故乘积33332;
  2. n = 7, n%3 == 1,7/3=2余1,取一个3(留下一个3),将取出的3和1合并即为4, 可分割为22,故32*2;
  3. n = 6, n%3 == 0,乘积直接为3*3;
int maxsplit(int n) {
  int sum =1;
  if (n <= 4) {
    if (n <= 0) return 0;
    else if (n == 1 || n == 2) return 1;
    else if (n == 3) return 2;
    else return 4;
  } else {
    int num = n/3;
    if (n % 3 == 0) {           
      for (int i = 1; i <= num; i++)
        sum = 3*sum;
    } else if (n % 3 == 1) {
      for (int i = 0; i < num; i++)
        sum = 3*sum;
      sum = sum*2*2;(2*2为取一个31凑成4而成的)
    } else if (n % 3 == 2) {
      for (int i = 0; i < num; i++) {
        sum = 3*sum;
      }
      sum = sum*2;
    }
    return sum;
  }
}
一. 把自然数S(S>1)分拆为若干个自然数的和: S=a1+a2+…+an,则当a1,a2,…,an中至多有两个2,其余都是3时,其连乘积m=a1a2…an有最大值。

例:把14分拆成若干个自然数的和,再求出这些数的积,要使得到的积最大,应该把14如何分拆?这个最大的乘积是多少?

14分拆成4个3与1个2之和,即14=3+3+3+3+2,这五数的积有最大值3×3×3×3×2=162。

二. 把自然数(s > 1)分拆为若干个不相等的自然数的和:因数个数越多,乘积越大,尽可能使各因数处理之后相加之和等于s。

例:把1993分拆成若干个互不相等的自然数的和,且使这些自然数的乘积最大,该乘积是多少?
解:为了使因数个数尽可能地多,我们把1993分成2+3…+n直到和大于等于1993。
若和比1993大1,则因数个数至少减少1个,为了使乘积最大,应去掉最小的2,并将最后一个数(最大)加上1。(使得和正好为1993)

解:n=63时因数之和超过1993,和为2015。2015-1993=22,应去掉22,把1993分成(2+3+…+21)+(23+24+…+63)这一形式时,这些数的乘积最大,其积为2×3×…×21×23×24×…×63。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你脸上有BUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值