Pagini recente » Cod sursa (job #2031293) | Cod sursa (job #2237733) | Cod sursa (job #933893) | Cod sursa (job #2052698) | Cod sursa (job #2528208)
#include<fstream>
#include<cmath>
#include<iostream>
using namespace std;
int n, k, ii, i, j, nr, p, np, nii;
int v[3500], c[3500], ok[4000];
pair<int, int> t[500][3500];
double d[500][3500];
ifstream fin("nummst.in");
ofstream fout("nummst.out");
int main(){
fin>> n;
for(i = 2; i <= n; i++){
if(n % i == 0){
k = i;
break;
}
}
if(k == 2){
fout<< n / 2 <<" "<< n / 2 <<"\n";
return 0;
}
for(i = 0; i <= k; i++){
d[0][i] = -1;
}
ok[1] = 1;
for(i = 2; i < k; i++){
if(c[i] == 1){
continue;
}
p++;
for(j = i + i; j <= k; j += i){
c[j] = 1;
}
for(ii = 0; ii <= k; ii++){
d[p][ii] = d[p - 1][ii];
t[p][ii] = t[p - 1][ii];
for(j = i; ii - j >= 0; j *= i){
if(d[p - 1][ii - j] != -1){
if(d[p][ii] < d[p - 1][ii - j] + log(j) ){
d[p][ii] = d[p - 1][ii - j] + log(j);
t[p][ii] = make_pair(p - 1, ii - j);
}
}
if(ok[ii - j] == 1){
if(d[p][ii] < log(j) + log(ii - j) ){
d[p][ii] = log(j) + log(ii - j);
t[p][ii] = make_pair(0, j);
}
}
}
}
for(j = i; j <= k; j *= i){
ok[j] = 1;
}
}
ii = 0;
for(i = 1; i <= k; i++){
if(d[p][i] > d[p][ii]){
ii = i;
}
}
if(ii != k){
v[++nr] = k - ii;
}
while(p != 0){
v[++nr] = ii - t[p][ii].second;
np = t[p][ii].first;
nii = t[p][ii].second;
p = np;
ii = nii;
}
v[++nr] = ii;
for(i = 1; i <= nr; i++){
fout<< v[i] * n / k <<" ";
}
return 0;
}