Cod sursa(job #2588337)

Utilizator levladiatorDragutoiu Vlad-Ioan levladiator Data 24 martie 2020 17:42:56
Problema NumMst Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("nummst.in");
ofstream fout("nummst.out");

int n,sum,k,i,j,h,poz,el,nex,q[500],ok,b[500][3190];
bool f[3190];
double s[2][3190],aux,maxi;

int main()
{
    fin>>n;
    for(i=2;i<=n;i++)
        if(n%i==0)
        {
            sum=i;
            break;
        }
    for(i=2;i<sum;i++)
        if(f[i]==0)
        {
            q[++k]=i;
            for(j=i+i;j<=sum;j+=i)
                f[j]=1;
        }
    s[0][0]=1;
    for(h=1;h<=k;h++)
    {
        ok=h%2;

        for(i=1;i<=sum;i++)
            s[ok][i]=s[1-ok][i];

        for(i=0;i<=sum;i++)
            if(s[1-ok][i]!=0)
                for(j=q[h];j+i<=sum;j*=q[h])
                {
                    aux=s[1-ok][i]+log(j);
                    poz=i+j;
                    if(aux>s[ok][poz])
                    {
                        s[ok][poz]=aux;
                        b[h][poz]=j;
                    }
                }
    }
    poz=0;
    for(i=sum;i>=1;i--)
        if(maxi<s[ok][i])
        {
            maxi=s[ok][i];
            poz=i;
        }
    if(poz!=0)
    {
        nex=poz;
        ok=k;
        while(ok!=-1)
        {
            if(b[ok][nex]==0)ok--;
            fout<<b[ok][nex]*(n/sum)<<" ";
            nex=nex-b[ok][nex];
            ok--;
        }
    }
    for(poz++;poz<=sum;poz++)
        fout<<n/sum<<" ";
}