|

楼主 |
发表于 2023-8-6 15:08
|
显示全部楼层
中国数学在线,
白新岭,
http://www.mathfan.com/CMS/node/305,
Blog文章,
简单阐述函数P(n)的值用Excel求解的方法,
在数论有函数P(n),是求所有n的表示方法,即把n分成1到n的任意堆,求所有分法的数目和。举例,6=6;
6=1+5,6=2+4,6=3+3;6=1+1+4,6=1+2+3,6=2+2+2;6=1+1+1+3,6=1+1+2+2;6=1+1+1+1+2;6=1+1+1+1+1+1。即P(6)=11。在分法中要求:a1+a2+a3+......+ak=n,(k不定),a1≥a2≥a3≥....≥ak.求符合上述2个条件的所有表示法的数目.看起来非常简单,或许一个小学生也可能求出10以前的值:
P(0)=1,(这是规定)P(1)=1,P(2)=2,P(3)=3,P(4)=5,P(5)=7,P(6)=11,P(7)=15,P(8)=22,P(9)=30,
P(10)=42,P(11)=56,P(12)=77,P(13)=101,....P(100)=190569292.到100已经是一个很大的数字,所以我们无法用列举法写出所有的结果,只能寻找其他的求解方法,当然在数论中已有近似公式,也有与此有关的定理,推论什么的.可是对于一个没有接触高等数学,深奥的数论知识的人来说,要想接受,学习它还是一件非常难的事情。现在我们从最简单的入手,如果用一堆表示n,那只有一种方法;如果把n分成不同的2堆,则有
,
在数论有函数P(n),是求所有n的表示方法,即把n分成1到n的任意堆,求所有分法的数目和。举例,6=6;
6=1+5,6=2+4,6=3+3;6=1+1+4,6=1+2+3,6=2+2+2;6=1+1+1+3,6=1+1+2+2;6=1+1+1+1+2;6=1+1+1+1+1+1。即P(6)=11。在分法中要求:a1+a2+a3+......+ak=n,(k不定),a1≥a2≥a3≥....≥ak.求符合上述2个条件的所有表示法的数目.看起来非常简单,或许一个小学生也可能求出10以前的值:
P(0)=1,(这是规定)P(1)=1,P(2)=2,P(3)=3,P(4)=5,P(5)=7,P(6)=11,P(7)=15,P(8)=22,P(9)=30,
P(10)=42,P(11)=56,P(12)=77,P(13)=101,....P(100)=190569292.到100已经是一个很大的数字,所以我们无法用列举法写出所有的结果,只能寻找其他的求解方法,当然在数论中已有近似公式,也有与此有关的定理,推论什么的.可是对于一个没有接触高等数学,深奥的数论知识的人来说,要想接受,学习它还是一件非常难的事情。现在我们从最简单的入手,如果用一堆表示n,那只有一种方法;如果把n分成不同的2堆,则有
[(n-1)/2](这里的中括号是取整函数,即等于某数的整数部分,小数舍去(对于负数要取小于它的整数,不能取大于它的整数(舍去的小数一定大于或等于0,而不小于0).举例说明,10可以分成(1,9);(2,8),(3,7),(4,6)共四种方法,(9,1)与(1,9)是一样的,可以把它看成集合的元素,集合的元素具有互异性,无序性.有人可能会问,(5,5)也该是它的一种2元表示,是的,在数论中,在函数P(n)中绝对是包括这种方法的,不过在这里它不是,这里的分堆法实际上是顺序自然系数方程解的组数,即1x+2y+3z+....+mr=n,1,2,3,...m是已知系数,共m个未知数,x,y,z,....,r都是未知数,且属于正整数,n是一个提前确定的不小于m(m+1)/2的正整数。现在我们分析m=3的情况,对于一个n来说,我们把它排成一排,然后从中任抽2个空位(排成的一排一定会占n个位置,n个1相连必定留下n-1个空位,所以有(n-1)*(n-2)/2中方法把n分成3堆,在这
样的分划过程中,会出现几种情况呢?如果3堆都不同,则一种分法就会出现3*2*1=6种抽取方法,还有两个数一样,三个数一样(这时,只在n是3的倍数时发生),两个数一样时有3种抽法,两个数一样可以用1x+2y=n求得,这样对于方程1x+2y+3z=n,可以这样求得{(n-1)*(n-2)/2-3*INT[(n-1)/2]-1(当n是3的倍数时)}/6.这样可以求出任意的1x+2y+3z=n解的组数,也就求出把一个n分成互不相同的3堆的方法数。即便这样分析下去,对于m=4,m=5,.....m时,还是很难的,有一个通用公式是:[n/m-1]*[n/(m-1)-2]*....*[n/2-m+1]/(m-1)!
这只是近似的求法,而且也仅是求一个确定的k值,也就是说仅是其中的一步,一类方法的数目,每个都有n类(以分成元的个数相同时为一类)。在上述方法中,还是不能用电脑快速求得结果,怎样才能用电脑快速求出结果呢?这样可以求得,在第一列我们排列自然数,从1到20000吧,第二列置数,都是1,也是说整体表示,只有一种,即整体1,所以1元表示法都是1,即x=n,任何确定的n都是1个解。第三列,有第二列错开2位(2行)与别列对应相加而得,即从第4行,输入公式C4=B2+C2,C5=B3+C3,公式都一样,可以快速双击进行本列填充(之所以从2行开始,是因为1行一般的作为列字段用,这里也不例外,数据放在2行一下);同样第四列可有第三列错3位与本列相加而得(错位是在第一值出现开始计算,但是不是从开始第一个值出现计位,而是相关联的列的第一个值出现开始计位�
��从单元格引用上可以看出来),即D7=C4+D4,D8=C5+D5,依次类推。
后边的列都按这种方法得到。数值的意义,是对应的n值m元的线性方程的正整数解的组数。这样我们会很快得到连续自然数为系数(系数从1开始)的线性方程的解的组数。元数任意,n任意。在上述的基础上,我们就可以用电脑求P(n)的值了。假设我们用S(n,m)表示线性方程x+2y+3z+...+mr=n的解的组数数目,则:
P(n)=S(n,1)+S(n+1,2)+S(n+3*2/2,3)+S(n+4*3/2,4)+.....+S(n+n*(n-1)/2,n),正好是n个方程解的组数数目的总和。例如P(10)=S(10,1)+S(11,2)+S(13,3)+S(16,4)+...+S(55,10)=1+5+8+9+7+5+3+2+1+1=42.好了,可以求出小点的P(n)数值了。
你发的帖子安全浏览模式
发件人:
admin<admin@mathfan.com>+
收件人:
我<ljwbxl@126.com>+
时 间:
2008年12月29日 13:30 (星期一)
这是邮箱里的存档。 |
|