因式分解(DFS) - 题解

因式分解(DFS) - 题解

将大于1的自然数N进行因式分解,满足 N = a 1 ∗ a 2 . . . . . . ∗ a m N = a_1 * a_2......*a_m N=a1a2......am 编一个程序,对任意的自然数N,求N的所有形式不同的因式分解方案总数。
例如,N=12,共有8种分解方案,分别是:
12 = 12 12=12 12=12
12 = 6 ∗ 2 12=6*2 12=62
12 = 4 ∗ 3 12=4*3 12=43
12 = 3 ∗ 4 12=3*4 12=34
12 = 3 ∗ 2 ∗ 2 12=3*2*2 12=322
12 = 2 ∗ 6 12=2*6 12=26
12 = 2 ∗ 3 ∗ 2 12=2*3*2 12=232
12 = 2 ∗ 2 ∗ 3 12=2*2*3 12=223
输入格式
第1行:1个正整数 N N N
输出格式
第1行:一个整数,表示 N N N的因式分解方案总数
样例
样例输入:
12
样例输出:
8
数据范围与提示
N < = 2 ∗ 1 0 9 N <= 2 * 10^9 N<=2109

#include 
int vis[50000];//记忆化数组,如果开2000000000就太大了,取平方根就行
long long dfs(int n) {
    if(n < 50000 && vis[n]) return vis[n];
    long long ret = 1, t = sqrt(n);
    for(int i = 2; i <= t; ++i) {
        if(n % i == 0) {
            int x = n / i;
            ret += dfs(x);
            if(x != i) ret += dfs(i);
        }
    }
    if(n < 50000) vis[n] = ret;
    return ret;
}
int main() {
    int n;
    scanf("%d", &n);
    printf("%lld", dfs(n));
    return 0;
}

你可能感兴趣的:(C++,DFS,算法,dfs,c语言,c++,编程语言)