Cod sursa(job #1436407)

Utilizator timicsIoana Tamas timics Data 15 mai 2015 21:02:12
Problema NumMst Scor 13
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<stdio.h>
#include<vector>
using namespace std;
int N, g=1, exp[4000];
vector<int> primes;
bool pr[4000];

int main() {
	freopen("nummst.in","r",stdin);
	freopen("nummst.out","w",stdout);
	scanf("%d",&N);
    for(int i=2;i<N;++i) {
        if(N%i == 0) {
            g = N/i;
            break;
        }
    }
    N = N/g;
    if(N==2) {
        printf("%d %d\n",g,g);
        return 0;
    }
    for(int i=2;i<=N;++i) {
        if(!pr[i]) {
            primes.push_back(i);
            for(int j=2;i*j<=N;++j) {
                pr[i*j] = 1;
            }
        }
    }
    int sum = N;
    bool ok = 1;
    
    while(sum && ok) {
        ok = 0;
        for(int k=0;k<primes.size();++k) {
            int p = primes[k];
            if(!exp[k]) {
                if(sum >= p) {
                    sum -= p;
                    exp[k] = p;
                    ok = 1;
                }
            } else {
                if(sum >= (p-1)*exp[k]) {
                    sum -= (p-1)*exp[k];
                    exp[k]*=p;
                    ok = 1;
                }
            }
        }
    }

    for(int i=0;i<primes.size();++i) {
        if(exp[i]) {
            printf("%d ",g*exp[i]);
        }
    }
    return 0;
}