找到{E1,.En}(E1+E2+.En=N,给定N),具有以下性质,即E1*E2*.En是最大值

Find {E1,..En} (E1+E2+..En=N, N is given) with the following property that E1* E2*..En is Maximum

本文关键字:En E1 E2 最大值 E1+E2+ 找到 给定      更新时间:2023-10-16

给定数字N,编写一个程序来计算数字E1、E2。。。En具有以下属性:

1) N=E1+E2+…+En
2) E1*E2*。。。En是最大值
3) E1.En是整数。无负值:)

你会怎么做?我有一个基于divide et impera的解决方案,但我想检查它是否是最优的。

Example: N=10
5,5        S=10,P=25
3,2,3,2    S=10,P=36

不需要算法,数学直觉可以自己完成:

第一步:证明数字大于3的结果集至多与只有3和2的结果集一样好

给定结果集中的任何数字x,人们可能会考虑将其划分为两个数字是否更好。

总和应该仍然是x

  • x为偶数时,当t=x/2时,达到tx-t)的最大值,并且除特殊情况x=2外,它大于x-,对于特殊情况x=4,等于x(见注释1)
  • x为奇数时,当t=(x±1)/2时,达到tx-t)的最大值

这显示了什么?只是你的最终集合中应该只有3和2,因为否则它是次优的(或等同于最优集合)。

第二步:你应该有尽可能多的3

现在,作为3²>2³,只要余数不是1,就应该有尽可能多的3。

结论:对于每N>=3:

  • 如果N=0 mod 3,则结果集仅为3
  • 如果N=1 mod 3,则结果集有一对2(或4),其余为3
  • 如果N=2 mod 3,则结果集有一个2,其余为3

请更正此帖子。我写结构良好的数学证明的时代已经很遥远了。。。

注1:(2,4)是唯一一对不同的整数,因此x^y=y^x。你可以用来证明这一点

x^y = y^x
y ln(x) = x ln(y)
ln(x)/x = ln(y) / y

函数ln(t)/t在其全局最大值后严格递减,达到2和3之间,所以如果您想要两个不同的整数,使得ln(x)/x = ln(y)/y,其中一个必须小于或等于2。由此可以推断出只有(2,4)有效

这不是一个完整的解决方案,但可能会有所帮助。

首先要注意的是,如果你固定n,并且E_i和E_j中的两个项相差不止一个(例如3和8),那么你可以通过尽可能多地"均衡"它们来做得更好,也就是说,如果数字p=E_i+E_j是偶数,那么你就可以用p/2来更好地处理这两个项。如果p是奇数,那么用p/2和p/2+1(其中/是整数除法)替换它们会做得更好。

也就是说,如果你知道最佳项数n是多少,你就可以做到:让所有E_i都等于n/n和n/n+1(同样是整数除法),所以它们的和仍然是n(这现在是一个简单的问题)。

所以现在的问题是什么是最优的n。假设现在允许你使用实数。那么每个项的解都是N/N,你可以把乘积写成(N/N)^N。如果你把它与n进行微分并找到它的根,你会发现n应该等于n/e(其中e是Neper数,也被称为欧拉数,e=2.71828……)。因此,我会寻找一个n=floor(n/e)或n=flor(n/m)+1的解,然后选择所有等于n/n或n/n+1的e_I,如上所述。

希望能有所帮助。

整数序列在线百科全书为该问题的解决方案提供了递归关系。

我会让其他人来比较复杂性。我不确定OP的方法有多复杂。