题意:给定一个数n,k个数的乘积为n 并且满足后一个时前 一个的倍数,求k的最大值并且输出这些数。
DFS即可解决
DFS用得还是不够多,调试调了好久
ac代码
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<set>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<string.h>
#include<string>
#include<math.h>
#define INF 0x7fffffff
#define IOS; {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);}
const int N = 1e5+5;
typedef long long ll;
using namespace std;
ll mid[111];
ll a[111];
ll ans,n;
void dfs(ll sum,ll k,ll la)
{
if(sum%la==0)
{
mid[k]=sum;
if(k+1>ans)
{
ans=k+1;
for(int i=0;i<ans;++i)
a[i]=mid[i];
}
}
for(ll i=la;i*i<=sum;i+=la)
{
if(sum%i==0&&i>1)
{
mid[k]=i;
dfs(sum/i,k+1,i);
}
}
return;
}
int main() {
IOS;
int t;cin>>t;
while(t--)
{
cin>>n;
ans=0;
dfs(n,0,1);
cout<<ans<<endl;
for(int i=0;i<ans;i++)
cout<<a[i]<<" ";
cout<<endl;
}
return 0;
}