正整数分拆使乘积最大

转自:http://www.blogbus.com/yjq24-logs/41404333.html

若干个正整数的和为S,求它们乘积的最大值F(S).

其实这是一个分解的问题,给定的S,分解成若干个正整数的和,然后求乘积的最大值。

S=a[1]+a[2]+…+a[n],F(S)=a[1]a[2]…a[n]

根据局部调整法分析所得到的A-G不等式,可以认为把S分成的都相等的n份是最好的,如果不能均分也应当使每个数尽量接近。

下面是题解,从每个a[k]的大小入手:

1)不可能存在某个a[i]=1,否则 1+a[k]>1*a[k];

2)不可能存在某个a[i]>=5,否则 2*(a[i]-2)>a[i];

3)不可能存在两个以上的2,否则 3*3>2*2*2;

4)当分解中出现4时,由于2*2=2+2,故可把4认为是两个2,故认为不会出现4;

综合以上4条,知a[k]由大部分的3构成,少部分的2构成.

故分解方法就是先分3,然后考虑S模3余2就再分一个2,S模3余1就少给一个3,再分两个2

最后整理如下,

当S>4时,记S=3p+q,其中p=floor[S/3],0<=q<3

F(S)=3^p as q=0,S=3p;

F(S)=4*3^(p-1) as q=1,S=3p+1;

F(S)=2*3^p as p=2,S=3p+2;

这道题还有一些思考空间,其实整个分发可以用两点来概括,3最多 和 没有1,满足这两点的分发就唯一确定了。

如果把题目限定的正整数改成正实数,那么结果会如何?

实数的话我们就可以直接用A-G不等式了,

 ,这个函数 取完对数两边求导可以知道驻点在

所以如果S=ke(k=1,2,3,…)的话.那直接分成k个e就是使乘积最大了;

如果S不能被e整除也没关系,比较一下把S分成floor(S/e)等份和floor(S/e)+1等份哪个更大就行了.

这就能解释为什么离散情况下我们需要尽可能多的3和少量的2了,因为3是最接近e的整数,2次之.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值