Cod sursa(job #586625)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 2 mai 2011 17:30:40
Problema NumMst Scor 28
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>
#include <cmath>

int n, d, h, f, a[4000], prev[4000], rs; 
double v[4000], g, sol;
char p[4000];

int main()
{
    freopen("nummst.in","r",stdin);
    freopen("nummst.out","w",stdout);
    scanf("%d",&n);
    int i, s, x, j, c;
    for (i=2; i*i<=n; i++)
    {
        if (!(n%i))
        {
            d=i;
            break;
        }
    }
    s=d;
    d=n/d;
    for (x=2; x<=s; x++)
        for (i=x+x; i<=s; i+=x) p[i]=1;
    for (i=2; i<=s; i++)
        if (!p[i]) a[++f]=i;
    if (s==2)
	{
        printf("%d %d\n",d,d);
		return 0;
    }
	v[0]=1;
	for (i=1; i<=f; i++)
	{
		c=1;
		for (x=a[i]; x<=s; x*=a[i], c++)
			for (j=s; j>=x; j--)
				if (v[j-x])
				{
					g=v[j-x]+log((double)x);
					if (g>v[j])
					{
						v[j]=g;
						prev[j]=x;
					}
				}
	}
	for (i=2; i<=s; i++)
		if (v[i]>sol)
		{
			rs=i;
			sol=v[i];
		}
	i=rs;
	while (i)
	{
		printf("%d ",prev[i]*d);
		i-=prev[i];
	}
	for (i=1; i<=s-rs; i++) printf("%d ",d);
    return 0;
}