Faktorizacije

Napisati program koji određuje sve faktorizacije datog prirodnog broja. Faktorizacija predstavlja razlaganje broja na činioce veće od 1. Činioce u okviru jedne faktorizacije urediti neopadajuće, a same faktorizacije izlistati leksikografski rastuće. U slučaju da je prosleđeni broj prost, ispisati samo njega.

Opis ulaza

Sa standardnog ulaza se učitava prirodan broj \(n\) (\(2 \leq n \leq 10000\)).

Opis izlaza

Na standardni izlaz ispisati sve faktorizacije datog broja, uređene po zahtevu zadatka, svaku u svom redu.

Primer

Ulaz

24

Izlaz

2 2 2 3 2 2 6 2 3 4 2 12 3 8 4 6

Rešenje

Opis glavnog rešenja

U ovom bloku se opisuje glavno rešenje zadatka.

#include <iostream>
#include <vector>

using namespace std;

void all_factorizations(int n, int start, vector<int>& current, vector<vector<int>>& result) 
{
    if (n == 1) {
        if (current.size() > 1) {  
            result.push_back(current);  
        }
        return;
    }

    for (int d = start; d <= n; d++) {
        if (n % d == 0) {  
            current.push_back(d);  
            all_factorizations(n / d, d, current, result);  
            current.pop_back();  
        }
    }
}

int main() 
{
    int n; cin >> n;

    vector<vector<int>> result;
    vector<int> current;

    all_factorizations(n, 2, current, result);

    if(result.size() > 0) {
        for (const auto& factors : result) {
            for (int factor : factors) {
                cout << factor << " ";
            }
            cout << endl;
        }
    } else {
        cout << n << endl;
    }

    return 0;
}