数论整数拆分.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一个正整数可以写成一些正整数的和。在数论上,跟这些和式有关的问题称为整数分拆、整数剖分、整数分割、分割数或切割数。其中最常见的问题就是给定正整数,求不同数组的数目,符合下面的条件: 11.a 1 + a +a 2 3 +...+a k = n. 1 2 3 ka ≥a ≥a ...≥a (k 1 2 3 k 其他附加条件(例如限定“k 是偶数”,或“不是 1 就是 2”等) 我们记所有不多于 k 个正整数的和以及相应的 n 时对应的上述方程的解的总数为 p(n, k). 记所有正好为 k 个正整数的和以相应的 n 时对应的解的总数为 p (n) k 分割函数 p(n)是求符合以上第一、二个条件的数组总数目,即 p(n) = p (n)+p (n)+...+p (n)。 1 2 k 例:4 = 1+1+1+1=1+1+2=2+2=1+3 其中 p(4,1) = 1, p(4,2) =2,p(4,3) = 1,p(4,4) =1.=p(4) = 5. 易知对于任意的 n=1,有 p (n) = 1.p (n) = 1. 1 n Ferrers 图示[有关知识可以自己查找]: kFerrers 图示是将第 1 行放 a1 个方格,第 2 行放 a2 个方格……第 k 行放 a 个方格,来表示整数分割的其中一个方法。 k 1 2 k定理 1:给定正整数 k 和 n,n 表达成不多于 k 个正整数之和的方法数目[p (n)+p (n)+...p (n)],等于将 n 分割成任意个不大于 k 1 2 k 证明:通过把前者任一解的 Ferrers 图沿对角线反转即可得到后者的一个解,所以两者相等。 定理 2[核心定理]:定理 1 中的两者的数目也等于 p(n+k,k).即 p (n+k) = p (n) + p (n) +... +p (n). k 1 2 k 证明:对于 p(n,1)+p(n,2)+...+p(n,k)中的所有情况,都可以通过在 Ferrers 图中的 1 到 k 行添 加 1 个元素来得到 p(n+k,k)中的一个元素,因为一共有 n+k 个元素且必为 k 行;同样可以通过在 p(n+k,k)中每行减去一个元素得到 p(n,1)+p(n,2)+...+p(n,k)中的元素,因为每行减去一个元素后剩下 n 个元素且至多 k 行。 [模型举例:假设有 n+k 个石头,放在编号为 1 到 k 的 k 个杯子里面,满足编号小的杯子里 放的石头要比编号大的多或者相等,并且要至少每个杯子一个,则有p (n+k)种放法,我们 k 可以先在每个杯子里放一个,只剩下 n 个石头,这时相当于往 k 个本子里放 n 个石头,此时 没有至少放一个石头的限制了,为 p(n, k)] 定理 3: nk1. 证明:由定理 2 得, p (n) = p (n-k) + p (n-k) +... +p (n-k) . k 1 2 k p (n-1) = p (n-k) + p (n-k) +... +p (n-k) = p (n) - p (n-k) k-1 1 2 = k-1 k k 定理 4: p(n, k) = p(n, k-1) + p(n-k, k). nk1,特别地,n=k 时 p(n,n) = p(n, k-1) + 1。证明: p(n, k) = p(n, k-1) + p (n) k 由定理 2 得, 当 kn 时,p (n) = p (n-k) + p (n-k) +... +p (n-k). k 1 2 k 由定义得,p(n-k, k) = p (n-k) + p (n-k) +... +p (n-k). 1 2 k = p (n) = p(n-k, k). k ,当 k=n 时,p (n) = 1. k p(n, k) = p(n, k-1) + p(n-k, k).或 p(n,n) = p(n, k-1) + 1 定理 4 提供了求p(n)的递推公式,由 p(n, k) = p(n, k-1) + p(n-k, k)我们可以很方便地构造一个递归的或者DP 的求解算法,当然一般情况下优先选择DP,递归会慢很多。 递归算法: int IntegerSplit(int n, int k) { if(n=0 || k =0) return 0; if(n==1 || k ==1) return 1; if(nk) return IntegerSplit(n,n); if(n==k) return IntegerSplit(n,k-1) + 1; return IntegerSplit(n,k-1) + IntegerSplit(n-k,k); } DP 算法:O(MaxN * MaxK) #define Ma

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档