接下来我将详细的说下整数划分问题:
将正整数表示成一系列正整数之和,
(其中,
)
正整数n的这种表示称为正整数n的划分。正整数n的不同的划分个数称为正整数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。
在正整数n的所有不同的划分中,将最大加数n1不大于m的划分个数记作q(n,m)。可以建立q(n,m)的如下递归关系。
当最大加数n1不大于1时,任何正整数n只有一种划分形式,即n=1+1+...+1
最大加数n1实际上不能大于n。因此q(1,m)=1。
正整数n的划分由n1=n的划分和n1≤n-1的划分组成。
正整数n的最大加数n1不大于m的划分由n1=m的划分和n1≤m-1的划分组成。
由以上关系给出计算q(n,m)的递归式
marlab代码如下
function num=count(n,m)
if n==1||m==1
num=1;
else
if n<m
num=count(n,n);
end
if n==m
num=1+count(n,m-1);
end
if n>m
num=count(n,m-1)+count(n-m,m);
end
end
end
当我们输入n=10,m=10时,得到结果正整数10的划分为42种情况。