QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2727|回复: 0
打印 上一主题 下一主题

[转帖]整数的分划问题

[复制链接]
字体大小: 正常 放大

3

主题

2

听众

21

积分

升级  16.84%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2006-2-2 19:48 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
[整数的分划问题]<BR>对于一个正整数M的分划就是把M写成一系列正整数之和的表达式。例如,对于正整<BR>数M=6,它可以分划为:<BR>6<BR>5+1<BR>4+2, 4+1+1<BR>3+3, 3+2+1, 3+1+1+1<BR>2+2, 2+2+1+1, 2+1+1+1+1<BR>1+1+1+1+1+1<BR>注意,分划与顺序无关,例如5+1和1+5是同一种分划。另外,这个整数M本身也算<BR>是一种分划。现在的问题是,对于给定的正整数M,要求编程序计算出其分划的数<BR>目P(M)。<BR><BR><BR>解析:<BR>我们定义一个函数Q(M.N),表示整数M的“任何被加数都不超过N”的分划的数目。<BR>Q(M.N)有以下递归关系:<BR>1)Q(M,1)=1,表示当最大的被加数是1时,该整数M只有一种分划,即M个1相加;<BR>2)Q(1,N)=1,表示整数M=1只有一个分划,不管最大被加数的上限N是多大;<BR>3)Q(M,N)=Q(M,M),如果M&lt;N。很明显,M的分划不可能包含大于M的被加数N;<BR>4)Q(M,M)=1+Q(M,M-1)。等式的右边分为两部分:第一部分的1表示M只包含一个被<BR>加数等于M本身的分划;第二部分表示M的所有其他分划的最大被加数N&lt;=M-1,所以<BR>其他分划的数目就是等式右边的第二项。<BR>5)Q(M,N)=Q(M,N-1)+Q(M-N,N),如果M&gt;N。等式右边的第一部分表示被加数中不包<BR>含N的分划的数目;第二部分表示被加数中包含N的分划的数目,因为如果确定了一<BR>个分划的被加数中包含N,则剩下的部分可以按照对M-N的分划进行划分。<BR>上述五个递归关系式对Q(M,N)作了递归定义。因为M的所有分划的数目P(M)=Q(M,<BR>M),所以上述关系式也定义了P(M)。<BR><BR>有了递归关系式后,解决问题的算法就非常简单了:<BR><BR>artition(M, N)<BR>1. if M &lt; 1 or N &lt; 1<BR>2.   then Error("输入参数错误")<BR>3. else if M = 1 or N = 1<BR>4.   then return 1<BR>5. else if M &lt; N<BR>6.   then return Partition(M, M)<BR>7. else if M = N<BR>8.   then return (1 + Partition(M, M-1))<BR>9. else<BR>10.  return (Partition(M, N-1) + Partition(M-N, N));<BR><BR>请注意,正整数的划分的数目随着M的增加增长的非常快(以指数级增长),所以<BR>不要用较大的整数来测试按照上述算法编写出的程序。<BR>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-20 01:13 , Processed in 0.426003 second(s), 52 queries .

回顶部