Split the number n into exactlyk positive integers such that the product of these integers is equal to n.
Return any one split in which the maximum difference between any two numbers is minimized. You may return the result in any order.
Example 1:
Input:n = 100, k = 2
Output:[10,10]
Explanation:
The split [10, 10] yields 10 * 10 = 100 and a max-min difference of 0, which is minimal.
Example 2:
Input:n = 44, k = 3
Output:[2,2,11]
Explanation:
Split [1, 1, 44] yields a difference of 43
Split [1, 2, 22] yields a difference of 21
Split [1, 4, 11] yields a difference of 10
Split [2, 2, 11] yields a difference of 9
Therefore, [2, 2, 11] is the optimal split with the smallest difference 9.
Constraints:
4 <= n <= 105
2 <= k <= 5
k is strictly less than the total number of positive divisors of n.
Solutions
Solution 1
Thinking
Factor \(n\) into \(k\) positive integers while minimizing the gap between the largest and the smallest. \(k\le 5\) and \(n\le 10^5\) allow a factor table and a search.
\(\textit{dfs}(i,x,\textit{mi},\textit{mx})\) still needs \(i\) factors and the remaining product is \(x\). Try each factor \(y\) of \(x\) and recurse on \(x/y\).
When \(i=0\), the last \(x\) updates the gap. Keep the path with the smallest gap. The sieve makes every remaining value branch on \(O(\sigma(x))\) factors.