求最大乘积的算法方法

Algorithmic approach to find Maximal Product

本文关键字:算法 方法      更新时间:2023-10-16

如果给定2个整数,比如a和b。找到b个正整数,使它们的和等于a,并且它们的乘积最大。我们必须退回最大的产品作为产量。

限制是-

0<b<20

b<a<100

必须使用什么样的算法或方法来解决这个问题?

假设我们有两个整数x,y,使得x<y.

(x+1)*(y-1) = x*y + y - x - 1 >= x*y

这意味着我们可以通过增加x和减少y来使产品更大。

因此,最优答案将使所有数字彼此在1个单位内(否则我们可以得到更好的答案)。

因此,我们的数字都等于x或x+1(对于一些尚未确定的x)。假设我们有k个较大的数,我们知道一定有b-k个较小的数。我们现在可以计算x和k如下:

x*(b-k)+k*(x+1) = a
b*x - k*x + k*x + k = a
b*x + k = a

因此x=a//b并且k=a%b。

最终产品将是x**(b-k)*(x+1)**k。

(注意,如果sum等于a,b>a,这个问题似乎有点奇怪,因为这在正整数中是不可能实现的。)