【问题标题】:How to find out the sum of products of all combinations of first n natural numbers taken r at a time?n and r are both constants [duplicate]如何找出一次取r的前n个自然数的所有组合的乘积之和?n和r都是常数[重复]
【发布时间】:2016-02-03 19:40:17
【问题描述】:

假设 n=10,r=3,那么我想找到从 1 到 10 一次取 3 的数字的乘积之和,以及所有考虑的组合。将有 nCr 可能的乘积,我想要它们的总和.

【问题讨论】:

  • 你能举个例子吗? “一次取 3 个数字的乘积”有点模糊。
  • 这个问题比较适合math.stackexchange.com。此外,您应该努力自己解决问题;如果看起来你只是想让他们给你答案,人们就不会想帮助你。
  • @ScottHunter 假设 n=4 和 r=2,那么我想找到:[1.2+1.3+1.4+1.5+2.3+2.4+2.5+3.4+3.5+4.5] 即所有的总和前 5 个自然数的乘积组合,一次取 2 个
  • @RobertDodier 我自己尝试了这个问题几个小时,当我无法解决时,我才在这里问。
  • @RobertDodier 我自己尝试了这个问题几个小时,当我无法解决时,我才在这里问。

标签: math


【解决方案1】:

你想要的是7次系数

(x+1)(x+2)·…·(x+10)

您可以在 O(n²) 运算中通过一个接一个地添加一个因子来计算该多项式的所有系数。


关于从根计算系数,请参阅How to efficiently find coefficients of a polynomial from its roots?Efficient calculation of polynomial coefficients from its rootsFind the coefficients of the polynomial given its roots

【讨论】:

  • 你能说明如何计算这个系数吗?
【解决方案2】:

S(n, m) 的重复出现,其中S 是您想要的总和:S(n + 1, m) = S(n, m) + (n + 1)*S(n, m - 1)S(n, 1) = n*(n + 1)/2S(m, m) = m!

术语(n + 1)*S(n, m - 1) 来自总和中的附加术语,这些附加术语是通过将n 增加1 产生的:这些术语是您为S(n, m - 1) 获得的所有术语(即在乘积中少一个术语)和将n + 1 附加到每个。

我一般不知道如何解决这样的重复问题。在这种情况下,我将构建一个术语表S(n, m),它看起来像一个三角形。底行是S(n, 1),即n*(n + 1)/2。对角线为S(m, m),即m!。因此,您可以尝试猜测给出表格中一般条目的公式,然后将它们全部加起来。

nm 的特定值计算S(n, m) 的Python 程序可能如下所示:

import math
def S(n, m):
  if m == 1:
    return n*(n + 1)/2
  elif n == m:
    return math.factorial(m)
  else:
    return S(n - 1, m) + n*S(n - 1, m - 1)

我相信,这大约需要 m*nS 的唯一调用(但有很多重复项)。当然,用其他语言编写它很容易。

例如,S(10, 3) = 18150

编辑:修改了估计的操作数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多