1. 程式人生 > >有關求任意一個正整數的n的因數的個數的求解思路

有關求任意一個正整數的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)

以上就是藉助遞迴思想進行求解的過程,可見遞迴還是很強大的。