题目很直白,方法就是暴力即可。
虽然说数据范围显得很大,但是在长整型范围内,一个数字的素因子数量最多不超64,而如果是不相同的素因子,虽然没有计算过,但是如果是12个不同的素因子应该会超过数据范围了。
所以果断采用找出所有素因子,再DFS做法。然而超时了.................
剪枝很容易处理,我们知道DFS算法是按顺序选择元素的,例如 2 2 3 3 3 序列,如果我们选择第一个2作为第一个元素,肯定无法形成序列,那么递归回去时下一次递归会选取第二个2作为首元,这种行为显然是没必要的。
#include <iostream>
using namespace std;
long long n,a[142]= {0},b[142]= {0},v[142],cnt=0,ok=1;
void dfs(long long step,long long pre)
{
if(step==cnt+1)
{
cout<<cnt<<endl;
for(int i=1; i<=cnt; i++)
cout<<b[i]<<' ';
ok=0;
return ;
}
for(int i=1; i<=cnt&&ok==1; i++)
{
if(a[