有关求任意一个正整数的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)

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

上一篇:JAVA学习笔记(1)—— eclipse自动补全和主题及字体配置


下一篇:《DSP using MATLAB》Problem 5.31