Pagini recente » Cod sursa (job #1149572) | Cod sursa (job #1194701) | Cod sursa (job #2875213) | Cod sursa (job #1537771) | Cod sursa (job #589478)
Cod sursa(job #589478)
#define NDEBUG
#include <stdio.h>
#include <math.h>
#include <float.h>
#include <assert.h>
#define dprintf(fmt, ...) \
assert(fprintf(stderr, fmt , ##__VA_ARGS__) >= 0)
int get_best(int n)
{
int i, k, q, r;
int max_pos;
double sum, max_sum;
max_sum = -DBL_MAX;
max_pos = -1;
for (k = 2; k <= n; k++) {
q = n / k;
r = n % k;
sum = 0;
q++;
for (i = 0; i < k; i++) {
if (i == r)
q--;
sum += log(q);
}
if (sum > max_sum) {
max_sum = sum;
max_pos = k;
}
dprintf("k=%d sum=%lf\n", k, sum);
}
dprintf("max_pos=%d max_sum=%lf\n", max_pos, max_sum);
return max_pos;
}
int main()
{
int n, k, p = -1;
int q, r;
int split;
if (freopen("nummst.in", "rt", stdin) == NULL)
return 1;
#if 0
if (freopen("nummst.out", "wt", stdout) == NULL)
return 1;
#endif
//scanf("%d", &n);
while (scanf("%d", &n) > 0) {
if ((n & 1) == 0) {
p = 2;
} else {
for (k = 3; k * k <= n; k++)
if (n % k == 0) {
p = k;
break;
}
}
assert(p > 0);
split = get_best(p);
dprintf("p=%d split=%d\n", p, split);
q = p / split;
r = p % split;
q++;
for (k = 0; k < split; k++) {
if (k == r)
q--;
printf("%d ", q * (n / p));
}
printf("\n");
}
return 0;
}