zoukankan      html  css  js  c++  java
  • 有关求任意一个正整数的n的因数的个数的求解思路

    已知条件:n=p1^a1xp2^a2xp3^a3........xpk^ak;求解n的因数的个数;

    求解的主要思想:递归

    设所有的因数的个数为U1;

    则U1会等于什么呢?

    不妨设求得p2^a2xp3^a3.......xpk^ak=U2;

    则我们可以这样考虑:

    U1包含3部分:1.只有p1的因素:共有a1种(无非是p1,p1*p1,...)

                             2.不包含p1: 共有U2种

                             3.包含p1,但不只是p1: 共有a1xU2种(对于U2中的每一种情况加乘有p1的项,就会构成新的一个因数)

    也许你会有疑问,假如有重复怎么办?答案是不可能的,因为如果重复的那个数是m,则m存在多种素因数分解式,显然矛盾。

    因此,我们可以得到一个递推式:U1=a1+U2+a1xU2=a1+(a1+1)U2;但是,有没有注意到,所有的因数都没有包含1,显然我们上面所包含的因素都大于1;

    所以设n的所有素因数的个数为C则C=U1+1;

                                               又递推可知:U2=a2+(a2+1)U3

                                                 ...............................................

                                            以上递推式可解得:U1=a1+a2x(a1+1)+a3x(a2+1)x(a1+1)+.......+akx(a[k-1]+1)x(a[k-2]+1)x....(a1+1)

                                           C=U1+1=a1+1+a2x(a1+1)+.....=(a1+1)x(a2+1)+........        

                                           发现了吧:最后C=(a1+1)x(a2+1)x(a3+1).........x(ak+1)

    以上就是借助递归思想进行求解的过程,可见递归还是很强大的。

              

    敢于面对难题,敢于面对自己。
  • 相关阅读:
    js数组操作
    docker操作命令
    swoole使用案例
    swoole实现视频弹幕效果
    swoole的UDP服务
    swoole的TCP服务
    安装回环网卡&安装Linux前准备
    Linux之安装Linux详细步骤
    Spring Boot的面试题
    Shell 脚本面试问题大全
  • 原文地址:https://www.cnblogs.com/cittysteven/p/8278114.html
Copyright © 2011-2022 走看看