История изменений
Исправление
kirk_johnson,
(текущая версия)
:
Какая-то отвратительная хрень. Сделай вот так:
#include <stdio.h>
#include <stdlib.h>
static struct denom {
struct denom *prev;
int base;
int power;
int n;
} start = {
.base = 2
};
void backward(int, struct denom *);
void forward(struct denom *A)
{
struct denom next;
if (A->n == 1) {
backward(1, A->prev);
return;
}
while (A->n % A->base)
A->base++;
A->power = 0;
do {
A->power++;
A->n /= A->base;
} while ((A->n % A->base) == 0);
next = *A;
next.prev = A;
forward(&next);
}
void backward(int out, struct denom *A)
{
for (int i = 0; i <= A->power; i++) {
if (A->prev)
backward(out, A->prev);
else
printf("%d ", out);
out *= A->base;
}
}
int main()
{
scanf("%d", &start.n);
if (start.n == 1)
printf("1 ");
else
forward(&start);
exit(EXIT_SUCCESS);
}
Исходная версия
kirk_johnson,
:
Какая-то отвратительная хрень.