Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get.
For example, given n = 2, return 1 (2 = 1 + 1); given n = 10, return 36 (10 = 3 + 3 + 4).
Note: You may assume that n is not less than 2 and not larger than 58.
这道题目是leetcode上的343题,题目大意是给一个整数,将其分成若干份,使得这几份之积最大。当然其他大神的解法也很好,这篇文章旨在为大家提供一种新的思路,有时候,很多问题也可以从编程本身以外进行思考,从而找到解决办法。好了,废话不多说,下面进行分析。假设输入的整数是k,我们要把它分成n份,使得这n份之积最大,根据直觉(事实上也正是如此),当这n份全部相等的时候,积可以最大。接下来就是想办法确定n的值了。
显然,这n份的积为y=(k/n)^n,所以现在就是找到使y最大的n,由于y一定大于0,我们对y取自然对数,当对数值最大时,等价于y的值最大。取对数后y变为lny = n(lnk-lnn)。求导有(过程略)lny' = lnk-lnn-1=ln(k/ne)。显然,当n>k/e时,导数小于0,当0<n<k/e时,导数大于0,所以lny在n=k/e时取得最大值。由于k/e不一定为整数,所以根据实际情况取更为接近的整数,然后分割相乘得到最大值。代码略。