题目链接:http://acm.ocrosoft.com/problem.php?cid=1222&pid=29
题目描述
1 < n < = 2^31
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种
输入
输出
样例输入
12
样例输出
8
#include<bits/stdc++.h>
using namespace std;
int n;
int a[11111];
int ans=0;
int cnt=0;
void dfs(int mul){
if(mul==n){
ans++;
return;
}
for(int i=1;i<cnt;i++){
if(mul*a[i]>n){
break;
}
//剪枝 否则会超时
if(n%(mul*a[i])==0){
dfs(mul*a[i]);
}
}
}
int main(){
while(cin>>n){
cnt=0;
ans=0;
for(int i=1;i<=sqrt(n);i++){
if(n%i==0){
a[cnt]=i;
cnt++;
if(i!=n/i){
a[cnt]=n/i;
cnt++;
}
}
}
sort(a,a+cnt);
dfs(1);
cout<<ans<<endl;
}
return 0;
}