caioj1043因式分解(深搜+剪枝)
阿新 • • 發佈:2018-12-13
【題意】 分解一個整數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; }