• 自然数积分解


    【题目描述】

    现需要把自然数N分解为若干个自然数之积,输出方案数。

    【输入描述】

    输入一个自然数N(1 ≤ n ≤ 2000000000)。

    【输出描述】

    输出一个数,表示方案数。

    【样例输入】

    20

    【样例输出】

    4

    【数据范围及提示】

    样例可分为:

    20

    4*5

    2*10

    2*2*5

    优化前:

    源代码:
    
    #include<cstdio>
    int n,ans(0);
    void Solve(int t,int num) //做题还是少啊!
    {
        if (num==1) //整除完毕。
        {
            ans++;
            return;
        }
        for (int a=t;a<=num;a++) //因数呈上升趋势,避免了重复。
          if (!(num%a)&&a!=1) //1的情况直接排除掉,避免无限递归。
            Solve(a,num/a);
    }
    int main()
    {
        scanf("%d",&n);
        Solve(1,n);
        printf("%d",ans);
        return 0;
    }

    优化后:

    源代码:
    
    #include<cstdio>
    int n,ans=1;
    void Solve(int t,int num)
    {
        for (int a=t;a*a<=num;a++) //简单的数学原理,不过没有了N本身的情况,故结果要+1。
          if (!(num%a)&&a!=1) //将优化前的程序由离散到聚集。只要成立,便已是1种方案,接下来只需要查看这种方案的子方案就可以了。
          {
              ans++;
            Solve(a,num/a);
          }
    }
    int main()
    {
        scanf("%d",&n);
        Solve(1,n);
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    apache安装 解决无services
    需要看的书
    rbac
    IDocHostShowUI
    Eclipse快捷键大全
    Linux中vi显示中文乱码的问题
    如何编译安装Go语言
    ubuntu11.04 下LAMP 开发环境配置
    网络内核sk_buff结构体
    查看所有表名,查询结果加上字符
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5573797.html
Copyright © 2020-2023  润新知