Bailian2749 分解因數【遞歸+枚舉】

2749:分解因數
總時間限制: 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

問題鏈接Bailian2749 分解因數
問題簡述:(略)
問題分析:採用遞歸加枚舉的方式解決。
程序說明:程序中採取枚舉整數所有因子的辦法來實現。
參考鏈接:(略)
題記:(略)

AC的C++語言程序如下:

/* Bailian2749 分解因數 */

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

int fact(int k, int n)
{
    int end = sqrt(n), sum = 1;
    for(int i = k; i <= end; i++)
        if(n % i == 0) sum += fact(i, n / i);
    return sum;
}

int main()
{
    int n, a;
    scanf("%d", &n);
    while(n--) {
        scanf("%d", &a);
        printf("%d\n", fact(2, a));
    }

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章