Cod sursa(job #2527467)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 20 ianuarie 2020 13:49:06
Problema NumMst Scor 36
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 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,el,nex;
bool f[100000],r[100000];
int q[100000],t[100000];
double s[100000],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]=0;
    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]+log(h);
                if(aux>s[poz])
                {
                    //fout<<poz<<"\n";
                    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)
    {
        nex=poz;
        while(nex!=0)
        {
            el=0;
            //fout<<nex<<" "<<t[nex]<<"\n";
            for(i=1;i<=nex-t[nex];i++) el+=n/sum;
            nex=t[nex];
            fout<<el<<" ";
        }
    }
    for(poz++;poz<=sum;poz++) fout<<n/sum<<" ";
    return 0;
}