整数拆分是一个经典的数学问题,我们从小学奥数,一直到大学的组合数学,可能都会遇到。从字面意思来看,是将一个整数拆分成若干整数之和,求的是不同的方案个数。我今天想讨论的问题是 “ 无序拆分 ”,比如 3 = 2 + 1 或 1 + 2 看做同一种拆分方法。

数学家们在研究整数拆分这个问题上,其实花了很长的时间。那是一段怎样的历史呢?

无忧公主

注:为了方便表示,在此定义 p(n) 为将 n 拆分为若干正整数之和、顺序无关且允许重复的拆分方案个数。我们来计算一下 p(5):5 可以拆分为 5、4+1、3+2、3+1+1、2+2+1、2+1+1+1、1+1+1+1+1,所以 p(5) = 7。

1、欧拉

18 世纪时,许多数学家都与欧拉保持着书信联系,一次,一位名叫诺地的先生问欧拉,是否研究过整数拆分问题。欧拉说,将 n 拆分为 m 个数的方案数,实际上就是:( 1 + x + x^2 + …… ) ( 1 + x^2 + x^4 + …… ) ( 1 + x^3 + x^6 + …… ) …… ( 1 + x^m + x^2m + …… ) 中 x^n 的系数。

欧拉是什么意思呢?第一个括号,代表拆分出若干个 1;第二个括号,代表拆分出若干个 2……构成一个 x^n,需要每个括号中各一项相乘,其指数之和为 n,也就是一种拆分方案。而 x^n 的系数,相当于整数拆分的方案数了。

其中的解法和上面提到的多项式乘法类似。

欧拉的方法尽管巧妙,但凭借他的计算能力,也只能计算到 p(49) = 173525。毕竟在 1740 年时,是没有计算器或者计算机,人工手算的范围很有限。

其实欧拉的方法,后来被人称为 “ 母函数 ” 。

2、拉马努金

200 年过去了,这才出现了一位数学家,名叫拉马努金,计算出了 p(200) = 3972999029388。说到这里,我想介绍一下拉马努金,他从未接受过正规数学训练,但他具有惊人的数学直觉。他自己独立发现了近 3900 个数学公式和命题。

他把自己所预见的数学命题全部记录在三大本笔记本上,但不写证明,只写命题。一位比利时数学家德利涅就是因为证明了拉马努金 1916 年提出的猜想,获得了菲尔兹奖。

不久以前有过一部讲述拉马努金一生的电影,其中也有提到过 “ 整数拆分 ” 哦。

可见拉马努金是一位非常厉害的印度数学家。在计算整数拆分数时,他推出了计算整数拆分方案数的一个 “ 公式 ”(我暂且不知道怎么推的):

下图是拉马努金的估算公式与实际 p(n) 之间的误差变化曲线图,当 n 越大时,误差其实就越小。其实我自己写了个程序验证的,之所以 n 只计算到 400,是因为再大一些的 p(n) 就要超过 64 位整数了。

当 n=400 时,误差约为 2.2%;我从网上的数据中得知,当 n=1000 时,误差缩小到 1.4% 左右。在计算机还没有出现的年代,拉马努金能推导出如此 “ 准确 ” 的公式,是非常不容易的!

数学上的整数拆分问题相关推荐

  1. poj 1032 Parliament 整数拆分

    题意:简单说,就是给你一个数n(5=<N<=1000),然后把这个数拆分成许多不同的自然数,使得这些自然数的乘积最大. 解题:无意中在一个奥数网站上看到整数拆分这个知识,觉得不错就搜了一个 ...

  2. leetcode 343. Integer Break | 343. 整数拆分(Java)

    题目 https://leetcode.com/problems/integer-break/ 题解 一开始以为,只要是 3 个数相加就可以,于是在错误的方向上越走越远: 后来发现并不只是 3 个数, ...

  3. 整数拆分 python_LeetCode 343. 整数拆分 | Python

    343. 整数拆分 题目 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化. 返回你可以获得的最大乘积. 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 ...

  4. 整数拆分问题的四种解法

    整数划分问题是算法中的一个经典命题之一 所谓整数划分,是指把一个正整数n写成如下形式: n=m1+m2+m3+....+mi;(其中mi为正整数,并且1<=mi<=n),则{m1,m2,m ...

  5. 母函数——整数拆分(HDOJ2152)

    最近看到了一些关于母函数的题目,去网上找了一些材料,加上自己的理解,现在可以解决一些简单的问题.那么什么是母函数?其实这个问题我也没有怎么搞懂,通过几个例子来说明一下.下面是转载的一个介绍 http: ...

  6. 小敏同学利用计算机设计,福建省晋江一中、华侨中学2015-2016学年七年级数学上学期期中质量检测试题(无答案) 华东师大版...

    福建省晋江一中.华侨中学2015-2016学年七年级数学上学期期中质量检测试 题 一.细心选一选,慧眼识金!(四个选项中只有一个答案是正确.每小题2分,共20分) 1.3的相反数是---------- ...

  7. 【算法】整数拆分问题

    1. 概述 给定一个整数n,将n拆分,问一共有多少种拆分方法. 整数拆分是很经典的问题.也是很经典的 "动态规划" 问题. 问题分析 1 = 12 = 2 = 1 + 13 = 3 ...

  8. 整数拆分的两种解法(已完成)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 整数拆分 ...

  9. 知识点 - 分拆数/整数拆分

    知识点 - 分拆数/整数拆分 解决问题类型: 将一个数用一个或多个正整数的无序和来表示有几种方案. 这是一个母函数的应用,利用了母函数的指数系数是五边形数来优化复杂度. 结论 (1)称正整数n分解为r ...

最新文章

  1. 二元函数洛必达求极限_由一类特殊的洛必达法则情形展开的讨论 ——小领域的大作用...
  2. 4________请拖拽到此区域5________请拖拽到此区域_5分钟学会:蒙版与通道(剪贴蒙版)...
  3. Django之Mode的外键自关联和引用未定义的Model
  4. AcWing 861. 二分图的最大匹配(匈牙利算法)
  5. 信息安全铁人三项赛真题解析_对 [CrackMe] 【ctf】2018信息安全铁人三项赛个人赛总决赛赛题分享 的一些补充...
  6. matlab IIR滤波
  7. 常见笔顺错误的字_容易出错的汉字|汉字中哪些字笔顺容易错
  8. 公文处理助手 【全自动文档排版插件 For Word(32/64)】
  9. 终端仿真程序-SecureCRT 绿色版提供下载
  10. AutoLisp从入门到放弃(四)
  11. 【面试】数据分析助理面试
  12. 前端的几种数据存储方式
  13. Spring Cloud Alibaba 微服务详细笔记
  14. html 下拉组件被下面的组件挡住,div被select下拉框挡住了--5种解决方法
  15. Linux常用命令笔记
  16. 一学就会的无代码RPA,让“高效”成为你的竞争优势
  17. RDF查询语言SPARQL
  18. VLC各种简单模块说明
  19. Citrix虚拟化技术之五XenServer6.2资源池配置
  20. 贪吃蛇c语言经典程序下载,c语言贪吃蛇源码

热门文章

  1. 电脑计算机的符号什么意思,计算机上面的符号代表什么意思  悬赏20
  2. 2014年360校园招聘笔试题,干货分享
  3. OSX 软件选择之编辑器
  4. 天津市网络安全等级保护和关键信息基础设施安全保护工作宣贯会成功举办
  5. erp打印面单 php实现,利用店小秘ERP处理Shopee虾皮订单及打印面单
  6. flutter实现可缩放可拖拽双击放大的图片功能
  7. 查询时报错The error may involve defaultParameterMap ### The error occurred while setting parameters
  8. 源码软件版本Release RC Beta说明
  9. MySQL--count函数如果得到null的处理方法
  10. R语言实战笔记--第十五章 处理缺失数据