Pagini recente » Cod sursa (job #2801804) | Cod sursa (job #128484) | Cod sursa (job #3224403) | Cod sursa (job #2188300) | Cod sursa (job #2527545)
#include <bits/stdc++.h>
#define DIM 10000010
using namespace std;
ifstream fin ("nummst.in");
ofstream fout ("nummst.out");
int ciur[DIM],p[DIM];
int t[DIM],sol[DIM],ok[DIM];
double dp[DIM];
vector <int> ans;
int n,i,j,k,d,nr;
int main (){
fin>>n;
for (i=2;i*i<=n;i++)
if (n%i == 0)
break;
d = n/i;
n = i;
for (i=2;i<=n;i++){
if (!ciur[i]){
for (j=i+i;j<=n;j+=i)
ciur[j] = 1;
p[++k] = i;
}
}
//dp[0] = log(1);
dp[0] = log(1);
ok[0] = 1;
for (j=k;j;j--){
for (i=n;i;i--){
if (ok[i-1] && dp[i-1] + log(1) > dp[i]){
dp[i] = dp[i-1] + log(1);
t[i] = i-1;
sol[i] = ok[i] = 1;
}
int nr = p[j];
while (nr <= i){
if (ok[i-nr] && dp[i-nr] + log(nr) > dp[i]){
dp[i] = dp[i-nr] + log(nr);
t[i] = i-nr;
sol[i] = nr;
ok[i] = 1;
}
nr *= p[j];
}
}
}
double maxi = 0;
int poz = 0;
for (i=1;i<=n;i++){
if (exp(dp[i]) > maxi){
maxi = exp(dp[i]);
poz = i;
}
}
int x = poz;
while (x){
ans.push_back(sol[x]*d);
//fout<<sol[x]*d<<" ";
x = t[x];
}
for (i=poz+1;i<=n;i++)
ans.push_back(d);
if (ans.size() > 1){
sort (ans.begin(),ans.end());
for (auto it:ans)
fout<<it<<" ";
return 0;
}
for (i=1;i<=n;i++)
fout<<d<<" ";
return 0;
}