www.xc88.com www.hg8500.com www.hg60028.com www.hg9599.com 世界杯指数
趣谈整数装分(下)- 主“拉马努金”到“计较机
 来源: 本站原创  发布时间:2019-08-30   

  欧拉的做法是多项式乘法,虽然人工拆括号会很麻烦,但写法式处置就会便利一些了。下面是实现的代码:

  前次有讲到过引见拉马努金的片子《 The man who knew Infinity (知无涯者)》,我抽暇赏识过了,此中有讲到他对整数拆分数的研究。其时正在英国剑桥大学的三一学院中,一位组合数学传授不相信一个来自印度的、没有接管过教育的人,可以或许发觉本人一直认为不存正在的公式。他们别离花了一个晚上,一人手算,一人用公式计较。正在对照计较成果——p (200) 时,传授简曲被震动了:误差不跨越2%!

  上期中,我的法式恰是用如许的方式,计较出 p(400) 的。这种做法简直比三维递归要快,复杂度为 O(n^2)。正在计较 p(400) 时,O(n^2) 和 O(n^3) 差别不是出格大,但若是到 p(4000),O(n^3) 就超时啦。

  把的递归方程稍微加工一下,能够变为二维的。设 f ( n , k ) 为将 n 拆分成不跨越 k 的整数之和的方案数,那么能够列出:

  另一种比力容易想到的方式是三维递归,设 f ( n , m , k ) 暗示将 n 拆分为 m 个不跨越 k 的整数的方案个数。这里加上 k 的,是为了每次划分出的数,是由大到小排序的,能够避免反复。于是我们能够获得:

  其实整数拆分数的研究一曲没有遏制,我的这 2 篇小文章也只是一个初步的引见。大师能够到 OEIS 上领会更多关于这方面的消息(整数拆分数的编号为 A000041)。前往搜狐,查看更多

  上期我引见了最后数学家对整数拆分的研究——从 “ 欧拉 ” 到 “ 拉马努金 ”,当然这个故事没有竣事,计较机的呈现也为此斥地了新的道。下面的文章能够提前阅读一下:

  这个算法的复杂度是 O(n^3) 的,不外因为计较 p(400) 以上的整数拆分数时,可能会跨越 64 位整数存储范畴,我开的数组大小只要 400。正在通俗计较机上,这个时间和空间复杂度都是能够接管的。

  这里注释一下方程的寄义,f ( n , k ) 包含 2 种环境。当拆分后有 k,则暗示 f ( n-k , k ),n-k 的拆分中能否会有 k,不需要处置。若不会拆分出 k,即最大数只可能为 k-1,则暗示着 f ( n , k-1 );当然,n 的拆分中能否还有 k-1,交给下一级处置了。

  列出这个形态转移方程当前,就能够用递归 + 回忆化搜刮(记实下已拜候过的成果,加速速度)来实现了: