1751:分解因數
阿新 • • 發佈:2019-01-07
- 總時間限制:
- 1000ms
- 記憶體限制:
- 65536kB
- 描述
- 給出一個正整數a,要求分解成若干個正整數的乘積,即a = a1 * a2 * a3 * ... * an,並且1 < a1 <= a2 <= a3 <= ... <= an,問這樣的分解的種數有多少。注意到a = a也是一種分解。
- 輸入
- 第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括一個正整數a (1 < a < 32768)
- 輸出
- n行,每行輸出對應一個輸入。輸出應是一個正整數,指明滿足要求的分解的種數
- 樣例輸入
-
2 2 20
- 樣例輸出
-
1 4
【題解一】
#include<algorithm> #include<cstdio> #include<cstring> using namespace std; int factor(int a,int b) { int cnt=0; if(a==1) return 1; for(int i=b; i<=a; i++)if(a%i==0) { cnt+=factor(a/i,i); } return cnt; } int main() { int n,a; scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d",&a); printf("%d\n",factor(a,2)); } return 0; }
【題解二】
#include<algorithm> #include<cstdio> #include<cstring> using namespace std; int factor(int a,int b) { int cnt=0; if(a==1) return 1; for(int i=b; i<=a; i++)if(a%i==0) { cnt+=factor(a/i,i); } return cnt; } int main() { int n,a; scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d",&a); printf("%d\n",factor(a,2)); } return 0; }