减而治之

递推

#include <iostream>
#include <cmath>

using namespace std;

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

    for (uint32_t i = 2u; i < sqrt(n) + 1; ++i) {
        while (n % i == 0) {
            cout << i << ' ';
            n /= i;
        }
    }
    if (n > 1u) {
        cout << n << ' ';
    }
    cout << endl;
}

递归

#include <cmath>
#include <iostream>
#include <string>

using namespace std;

string PrimeFactors(uint32_t i, uint32_t n)
{
    for (; i < sqrt(n) + 1; ++i) {
        if ((n % i) == 0) {
            return to_string(i) + " " + PrimeFactors(i, n / i);
        }
    }
    return to_string(n) + " ";
}

int main()
{
    uint32_t n;
    cin >> n;
    cout << PrimeFactors(2, n);
}

变更履历

2022/8/27:优化递归解法,新增递推解法