【题意】
分解一个整数n,格式如下:
n = a1*a2*a3*a4…….*am
比如:
12=12
12=6*2
12=4*3
12=3*4
12=3*2*2
12=2*6
12=2*3*2
12=2*2*3
总共8种
【输入格式】
一行一个整数n(1 < n < = 2^31 )。
【输出格式】
输出分解的总数。
【样例输入】
12
【样例输出】
8
题解:
#include<bits/stdc++.h>
using namespace std;
int num[10000];
int n;
int ans;
int t=0;
void getFactor()
{
for(int i=2;i<=sqrt(n+1);i++){
if(n%i==0){
num[++t]=i;
if(i*i!=n){
num[++t]=n/i;
}//必须预处理出他的因子,否则超时;
}
}
num[++t]=n;
}
void dfs(int x)
{
if(x==n)ans++;
for(int i=1;i<=t;i++){
if(x*num[i]>n)break;//这里不剪枝会有超时
if(n%(x*num[i])==0){
dfs(x*num[i]);
}
}
}
int main()
{
cin>>n;
getFactor();
sort(num+1,num+t+1);
dfs(1);
cout<<ans;
}