當前位置:編程學習大全網 - 編程軟體 - c語言 有壹個整數N,N可以分解成若幹個整數之和,問如何分解能使這些數的乘積最大

c語言 有壹個整數N,N可以分解成若幹個整數之和,問如何分解能使這些數的乘積最大

最優化問題,盡量都分成3,不足部分就分成2。

對於 n < 4,可以驗證其分解成幾個正整數的和的乘積是小於 n 的。

對於 n >= 4, 能證明其能分解成幾個數的和使得乘積不小於 n。

如果分解成 1 和 n - 1,那麽對乘積是沒有幫助的,因此,假設 n

分解成 a 和 n - a,2 <= a <= n - 2,那麽

a * (n - a) - n

= (a - 1) * n - a * a + a - a

= (a - 1) * (n - a) - a

>= (a - 1) * 2 - a

= a - 2

>= 0

如果 a, n - a 仍然 >= 4,那麽繼續分解,直至 a, n - a < 4。因為每次分解都能使乘積

增加,所以最優解必是最終分解結果,也即分解出的數全是 2 或 3 。

(1)

假設 n 是偶數,且分解成 a 個 2 和 b 個 3,即 n = 2 * a + 3 * b,則乘積為 2a * 3b。

註意到 23 < 32 且 2 * 3 = 3 * 2 = 6,所以每 3 個 2 換成 2 個 3 會使乘積更大,因此,

最優方案是分解成 n/6*2 個 3 和 n%6/2 個 2,乘積為 3n/6*2 * 2n%6/2。

(2)

假設 n 是奇數,則壹定需要分出壹個 3,然後 n - 3 就是偶數。因此最優方案是分解出

(n-3)/6*2+1 個 3 和 (n-3)%6/2 個 2,乘積為 3(n - 3)/6*2+1 * 2(n-3)%6/2。

  • 上一篇:hive的適用場景
  • 下一篇:?服裝店的燈光布局設置的壹些小技巧
  • copyright 2024編程學習大全網