Description
給出一個正整數a,要求分解成若干個正整數的乘積,即a = a1 * a2 * a3 * ... * an,並且1 < a1 <= a2 <= a3 <= ... <= an,問這樣的分解的種數有多少。注意到a = a也是一種分解。
Input
第1行是測試數據的組數n,後面跟着n行輸入。每組測試數據佔1行,包括一個正整數a (1 < a < 32768)
Output
n行,每行輸出對應一個輸入。輸出應是一個正整數,指明滿足要求的分解的種數
Sample Input
2
2
20
Sample Output
1
4
這題最主要的就是在自定義函數裏捋清楚在什麼條件下可以繼續進行循環遞歸操作,在什麼情況下跳出循環即可。另外就是在設計自定義函數是要第一時間整明白,一個形參是行不通的,因爲後面的數得大於前面的數,所以前面的數也要傳,同時還要傳要分解的數才ok
#include<stdio.h>
int count;
void fun(int a,int n)
{
int i=n,j;
for(i=a;i<n;i++)
{
if(n%i==0 && i<=n/i)
{
count++;
fun(i,n/i); //傳值的數應該》=i
}
if(i>n/i) break;
}
}
int main()
{
int n,m,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&m);
count=1;
fun(2,m);
printf("%d\n",count);
}
return 0;
}