Cod sursa(job #2527459)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 20 ianuarie 2020 13:35:00
Problema NumMst Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("nummst.in");
ofstream fout("nummst.out");
int n,d,sum,k,i,j,h,poz;
bool f[100000],r[10000];
int q[10000],t[10000];
unsigned long long s[10000],el,aux;

int main()
{
    fin>>n;
    for(i=2;i<=n;i++) if(n%i==0) break;d=i;sum=d;
    for(i=2;i<sum;i++) if(f[i]==0)
    {
        q[++k]=i;
        for(j=i+i;j<=sum;j+=i) f[j]=1;
    }
    r[0]=1;s[0]=1;
    for(i=1;i<=k;i++)
        for(j=sum;j>=0;j--)
            for(h=q[i];h+j<=sum;h*=q[i]) if(r[j])
            {
                poz=j+h;r[poz]=1;
                aux=s[j]*h;
                if(aux>s[poz])
                {
                    s[poz]=aux;
                    t[poz]=j;
                }
            }
    int maxi=0;poz=0;
    for(i=sum;i>=1;i--)
    {
        if(maxi<s[i])
            maxi=s[i],poz=i;
    }
    //fout<<poz<<"\n";
    if(poz!=0)
    {
        aux=maxi;
        while(aux!=0)
        {
            el=1;
            //fout<<aux<<" "<<t[aux]<<"\n";
            for(i=1;i<=aux-t[aux];i++) el*=n/sum;
            aux=t[aux];
            fout<<el<<" ";
        }
    }
    for(poz++;poz<=sum;poz++) fout<<n/sum<<" ";
    return 0;
}