正整数n的划分问题

问题:将以正整数n表示成一系列正整数之和.
         n=n1+n2+n3+...+nk (n1>=n2>=n3>=nk>=1, k>=1)
这就是正整数n的一个划分,正整数n不同的划分个数称为正整数n的划分数, 记作p(n)

例如:6 有如下11种划分则p(6)=11
6;
5+1;
4+2, 4+1+1;
3+3, 3+2+1, 3+1+1+1;
2+2+2, 2+2+1+1, 2+1+1+1+1;
1+1+1+1+1+1;

则求任意正整数的划分数p(n).
 
 
解决:在所有划分中,将最大加数n1不大于m的划分个数记作q(n, m).
算法描述及分析过程

在正整数的所有不同的划分中,将最大加数不大于的划分个数记作。可以建立的如下递归关系。

(1)q(n,1)=1,n>=1;

  当最大加数n1不大于1时,任何正整数n只有一种划分形式。即n=1+1+1+..+1;

(2)q(n,m)=q(n,n),m>=n;

最大加数n1实际上不能大于n。

(3)q(n,n)=1+q(n,n-1);

正整数n的划分由n1=n的划分和n1<=n-1的划分组成。

(4)q(n,m)=q(n,m-1)+q(n-m,m)

正整数n最大加数n1不大于m的划分由n1=m的划分和n1<=m-1的划分组成。

其实这里是分为了两部分,一种是包含m,一种是不包含m,这种数目之和就是q(n,m)的化分数了。

 

以上的关系实际上给出了计算q(n,m)的递归式如下:

解释下第四种情况:

一种是n1=m,意味着项中必须要有m,
所以n1+(n-m)=n,这部分其实就是对n-m的划分,
另一部分是n1<=m-1,这部分不管有多少种划分,项中没有m。总的来说,n的划分就是有含有m的项和不含m的项的个数组成。

 

你可能感兴趣的:(正整数n的划分问题)