(⊙﹏⊙)我交了好久,有坑啊…(如果没有匹配的话,即输出0种情况要记得换行…)
就是搜索,加上一点数论,并不太难…
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define M 100100using namespace std;typedef long long ll;ll n,p[M],ans[M],tot;bool not_prime[M];void Get_Prime(){ int i,j; ;i<=;i++) { if(!not_prime[i]) p[++p[]]=i; ;p[j]*i<=&&j<=p[];j++) { not_prime[p[j]*i]=; ) break; } }}bool Judge_Prime(ll x){ ll i; ) ; ;p[i]*p[i]<=x;i++) ) ; ;}void DFS(ll now,int pos,ll left){ int i; ) { ans[++ans[]]=now; return ; } >=p[pos] && Judge_Prime(left-) ) ans[++ans[]]=(left-)*now; for(i=pos; p[i]*p[i]<=left ;i++) { ll power_sum=p[i]+,power=p[i]; for(;power_sum<=left;power*=p[i],power_sum+=power) ) DFS(now*power,i+,left/power_sum); }}int main(){ int i; Get_Prime(); while(scanf("\n%lld",&n) !=EOF) { memset(ans,,sizeof(ans)); tot=; DFS(,,n); sort(ans+,ans+ans[]+); cout << ans[] << endl; ;i<ans[];++i) printf("%lld ",ans[i]); ] != ) cout << ans[ans[]] << endl; else puts(""); }}
本人的第一篇博客,以后会有很多啦….新人,望多多支持!