#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 1e5;
#define LL long long
vector<LL> divi;
vector<LL> ans;
void solve(LL x,LL k)
{
if(x==1)
{
ans.push_back(1);
return;
}
if(k==0)
{
ans.push_back(x);
return;
}
vector<LL> divs;
for(int i=0;i<(int)divi.size()&&divi[i]<=x;++i)//重复利用之前的结果进行计算
{
if(x%divi[i]==0)
{
divs.push_back(divi[i]);
}
}
if(divs.size()==2)
{
for(int i=0;i<k&&ans.size()<maxn;++i)
{
ans.push_back(1);
}
if(ans.size()<maxn) ans.push_back(x);
}else
{
for(int i=0;i<(int)divs.size();++i)
{
if(ans.size()<maxn) solve(divs[i],k-1);
}
}
}
int main()
{
LL x,k;
scanf("%lld%lld",&x,&k);
if(k==0)
{
printf("%lld\n",x);
return 0;
}
for(LL i=1;i*i<=x;++i)
{
if(x%i==0)
{
divi.push_back(i);
if(i*i!=x) divi.push_back(x/i);
}
}
sort(divi.begin(),divi.end());
for(int i=0;i<(int)divi.size();++i)
{
if(ans.size()<maxn)
solve(divi[i],k-1);
}
for(int i=0;i<(int)ans.size();++i)
printf("%lld ",ans[i]);
puts("");
return 0;
}
448 E. Divisors
最新推荐文章于 2021-04-05 22:18:33 发布