题意:给一个数x,然后分出因子算1次。然后把因子再分又算一次,问k次后有输出。
题解:先把x因子都分解出来,存下来,再用DFS从第一个 因子开始搜索,直到这个等于1或者搜索到第k层输出这个数,或者输出的个数超过1e5则return。
#include <bits/stdc++.h>
using namespace std;
#define ll __int64
ll a[100000],t,cnt;
void DFS(ll n,ll k)
{
if (cnt>=1e5)
return;
if (k==0 || n==1)
{
cnt++;
printf("%I64d ",n);
return;
}
for (ll i=0;i<t && n>=a[i];i++)
if (n % a[i]==0)
DFS(a[i],k-1);
return;
}
int main()
{
t=0;
ll n,k;
scanf("%I64d%I64d",&n,&k);
for (ll i=1;i*i<=n;i++)
if (n % i==0)
{
a[t++]=i;
if (i!=n/i)
a[t++]=n/i;
}
cnt=0;
sort(a,a+t);
DFS(n,k);
return 0;
}