Pagini recente » Cod sursa (job #1528882) | Cod sursa (job #2918878) | Cod sursa (job #2277985) | Cod sursa (job #1116036) | Cod sursa (job #2527464)
#include <bits/stdc++.h>
#define DIMN 10000
using namespace std;
int elem;
int c[DIMN] , sol[DIMN];
int tt[DIMN] , prm[DIMN] , found[DIMN];
double rcs[DIMN];
void ciur (int n){
int i , j;
for (i = 2 ; i <= n ; i++){
if (!c[i]){
prm[++elem] = i;
for (j = i ; j <= n ; j += i){
c[j] = 1;
}
}
}
}
int main()
{
FILE *fin = fopen ("nummst.in","r");
FILE *fout = fopen ("nummst.out","w");
int n , d , dmic , dmare , i , j , nr , sum;
fscanf (fin,"%d",&n);
d = 2;
while (d * d <= n){
if (n % d == 0){
dmic = d;
dmare = n / d;
break;
}
d++;
}
/// suma trb sa fie dmic , adica acum n
n /= dmare;
ciur (n);
//found[0] = 1;
rcs[0] = -1;
for ( i = 1 ; i <= n ; i++ ){
rcs[i] = 0;
tt[i] = i-1;
found[i] = 1;
}
for (i = 1 ; i <= elem ; i++){
for (j = 0 ; j + nr <= n ; j++){
//if (j == 0)
// printf ("%lf\n" ,log10((double)nr) );
if (found[j] && rcs[j] + log10((double)nr) > rcs[j + nr]){
//printf ("intra\n");
found[j + nr] = 1;
rcs[j + nr] = rcs[j] + log10((double)nr);
tt[j + nr] = j;
}
}
if (!found[nr] || rcs[nr] < log((double)nr)){
found[nr] = 1;
rcs[nr] = log((double)nr);
tt[nr] = 0;
}
}
sum = n;
int x = 0;
while (sum){
sol[++x] = sum - tt[sum];
sum = tt[sum];
}
for ( i = x ; i ; i-- ){
fprintf (fout,"%d " , sol[i] * dmare);
}
return 0;
}