因子乘积的组合

Numbers can be regarded as product of its factors. For example,

8 = 2 x 2 x 2;
  = 2 x 4.

Write a function that takes an integer n and return all possible combinations of its factors.

Note:

  1. Each combination's factors must be sorted ascending, for example: The factors of 2 and 6 is [2, 6], not [6, 2].
  2. You may assume that n is always positive.
  3. Factors should be greater than 1 and less than n.

Examples:
input: 1
output:

[]

input: 37
output:

[]

input: 12
output:

[
  [2, 6],
  [2, 2, 3],
  [3, 4]
]

input: 32
output:

[
  [2, 16],
  [2, 2, 8],
  [2, 2, 2, 4],
  [2, 2, 2, 2, 2],
  [2, 4, 4],
  [4, 8]
]
vector<vector<int>> getFactors(int n) {
    vector<vector<int>> ans;
    vector<int> comb;
    search(n, 2, comb, ans);
    return ans;
}

void search(int n, int startNum, vector<int> &comb, vector<vector<int>> &ans) {
    if (n == 1) {
        ans.push_back(comb);
        return;
    }
    
    for (int i = startNum; i * i <= n; i++) {
        if (n % i == 0) {
            comb.push_back(i);
            // n/i能拆分成更多小因子乘积
            search(n / i, i, comb, ans);
            // 或n/i不再拆分了
            comb.push_back(n / i);
            ans.push_back(comb);
            comb.pop_back();
            comb.pop_back();
        }
    }
}