範例程式碼 uva10858

//uva10858
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

void dfs(int n, int divisor, vector<vector<int> > &ans, vector<int> &comb){

  
    int bound = sqrt(double(n));

    for (int i = divisor; i <= bound; i ++){
        if (n % i == 0){
            comb.push_back(i);
            dfs(n / i, i, ans, comb);
            comb.pop_back();
        }
    }
    comb.push_back(n);
    ans.push_back(comb);
    comb.pop_back();

}

int main() {
	int n;
    while (cin >> n && n != 0){

        vector<vector<int> > ans;
        vector<int> comb;
        

        dfs(n, 2, ans, comb);
        ans.pop_back();

        cout << ans.size() << "\n";
        for (int i = 0; i < ans.size(); i++){
            cout << ans[i][0];
            for (int j = 1; j < ans[i].size(); j++){
                cout << " " << ans[i][j];
            }
            cout << "\n";
        }

    }
}