已过样例
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=100010;
int n,ans,c[N],v[N],cnt,an[N];
bool pd(int x) {
for(int i=1;c[i]<=sqrt(x);i++)
if(x%c[i]==0)
return false;
return true;
}
void dfs(int wz,int da,int sx) {//第wz个质数,数为da,还剩sx没分
if(sx==1) {
an[++ans]=da;
return ;
}
if(sx-1>=c[wz]&&pd(sx-1))
an[++ans]=da*(sx-1);
for(int i=wz+1;i<=cnt&&c[i]*c[i]<=sx;i++) {
int jl=1+c[i],j=c[i];
while(jl<=sx) {
if(sx%jl==0)
dfs(i,da*j,sx/jl);
j=j*c[i];
jl+=j;
}
}
}
signed main(){
for(int i=2;i<=N;i++) {
if(v[i]==0) {
v[i]=i;
c[++cnt]=i;
}
for(int j=1;j<=cnt;j++) {
if(c[j]*i>N) break ;
v[c[j]*i]=c[j];
}
}
while(scanf("%lld",&n)!=EOF) {
memset(an,0,sizeof(an));
ans=0;
dfs(0,1,n);
printf("%lld\n",ans);
sort(an+1,an+ans+1);
for(int i=1;i<=ans;i++)
printf("%lld ",an[i]);
if(ans!=0) printf("\n");
}
return 0;
}