正整数分解使得乘积最大问题

问题描述:

设n是一个正整数。现在要求将n分解为若干个自然数之和,使得自然数的乘积最大。输出这个最大的乘积。

这类问题一般有两种问法:

(1)要求这些自然数互不相同

(2)要求这些自然数可以是相同的

对于第一种:

要求自然数互不相同。这类题一开始需要我们手写几个数来看看规律,从5开始写起,5=2+3,6=2+4,7=3+4,8=3+5,9=2+3+4,10=2+3+5,11=2+4+5

发现规律如下:

(1)尽量使得元素是连续的。

(2)如果有多出来的,从后往前均匀分配到各个元素。考虑到一种特殊情况,当多出来的数比前面已有元素的个数大1时(比如8的情况),先给已有元素的最大元素加1,然后再均匀分配到每个元素。

对于第二种:

对于元素可以是相同的,我们仍然通过手写几个数查看一下规律:4=2+2,5=2+3,6=3+3,7=3+2+2,8=3+3+2,9=3+3+3。

发现规律如下:

(1)元素不会超过4,因为4=2+2,又可以转化为2的问题,而5=2+3,5<2*3,所以5总能分解成2和3。

(2)尽可能多分解出3,然后分解出2,不要分出1。

考虑任意一个数,除以3之后的结果有以下3种:

(1)能被3除断,那么就分解为3+3+…+3的情况即可。例如9=3+3+3。

(2)被3除余1,分解为3+3+…+3+2+2或者3+3+…+3+4的情况,例如10=3+3+2+2

(3)被3除余2,分解为3+3+…+3+2的情况,例如11=3+3+3+2。

你可能感兴趣的:(LeetCode)