#include<stdio.h>
struct denom{
struct denom *prev;
int base;
int power;
int n;
} start;
int forward(struct denom* A){struct denom next;
if(A->n==1){
backward(1,A->prev);
return 0;
}
while(A->n%A->base)A->base++;//yes, not so fast;
A->power=0;
do{A->power++;
A->n/=A->base;
}while(!(A->n%A->base));
next=*A;
next.prev=A;
forward(&next);
}
int
backward(int out,struct denom* A){
int i;
for(i=0;i<=A->power;i++){
if(A->prev){
backward(out,A->prev);
}else{
printf("%d ",out);
}
out*=A->base;
}
}
int main(){
start.prev=NULL;start.base=2;start.power=0;
scanf("%d",&start.n);
if(start.n==1){printf("1 ");return 0;}
forward(&start);
return 0;
}
ну и после хвастовства, как бы по красивее? в частности установка полей при вызове ща уже есть в синтаксисе? ну и какие есть гарантии при применении трафарета структуры к явным аргументам функции( в части согласованости порядка аргументов и полей) upd. совсем не вермишель