Pagini recente » Cod sursa (job #1160195) | Cod sursa (job #1473786) | Cod sursa (job #510559) | Cod sursa (job #2394222) | Cod sursa (job #2528506)
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("nummst.in");
ofstream fout("nummst.out");
int n,i,j,prim[460],tata[460][3205],v[3205];
bool w[3205];
double d[460][3205];
int main()
{
fin >> n; int cmmdc = 0;
for (i=2; i*i<=n; i++)
if (n%i == 0)
{
cmmdc = n/i;
break;
}
n /= cmmdc; int k = 0;
if (2 < n)
prim[++k] = 2;
for (i=3; i<n; i+=2)
if (w[i] == 0)
{
prim[++k] = i;
for (j=i+i; j<n; j+=i)
w[j] = 1;
}
for (i=1; i<=k; i++)
{
for (j=1; j<=n; j++)
d[i][j] = d[i-1][j];
if (prim[i] > n)
break;
int val = prim[i];
while (val <= n)
{
for (j=0; j<=n-val; j++)
if (d[i-1][j]+log(val) > d[i][j+val])
{
d[i][j+val] = d[i-1][j]+log(val);
tata[i][j+val] = val;
}
val *= prim[i];
}
}
i--;
while (i > 0)
{
if (tata[i][n] > 0)
{
fout << tata[i][n]*cmmdc << " ";
n -= tata[i][n];
}
i--;
}
while (n > 0)
{
fout << cmmdc << " ";
n--;
}
return 0;
}