Cod sursa(job #2528669)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 22 ianuarie 2020 12:49:32
Problema NumMst Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
using namespace std;

const int DIM = 5e4 + 5;

vector<int> prm;

int fth[DIM];
bool oki[DIM];
long double dp[DIM];

int main(void) {
    freopen("nummst.in", "r", stdin);
    freopen("nummst.out", "w", stdout);
    int n; cin >> n;
    int vl = 0;
    for (int i = 2; i <= n && !vl; ++i)
        if (n % i == 0)
            vl = i;
    for (int i = 2; i < vl; ++i) if (!oki[i]) {
        prm.push_back(i);
        for (int j = i * i; j <= vl; j += i)
            oki[j] = true;
    }
    for (int i = 1; i <= vl; ++i)
        fth[i] = 1;
    for (int x : prm) {
        for (int i = vl; i >= 0; --i) {
            for (int y = x; i + y <= vl; y *= x) {
                if (dp[i + y] < dp[i] + log(y)) {
                    dp[i + y] = dp[i] + log(y);
                    fth[i + y] = y;
                }
            }
        }
    }
    for (int i = vl; i; i -= fth[i])
        cout << fth[i] * (n / vl) << " ";
    return 0;
}