倒乘法金字塔

Inverted Multiplication Pyramid

我有一个倒金字塔。顶部是从 1 到 N 的数字。 下面,我们写出 (N – 1) 个数,每个数都是它上面两个数的乘积。每行依此类推。

例如 (n = 4):

1       2       3       4
    2       6      12
       12      72
          864

我必须找到最终数字的第一位数字。这可以在 O(N) 中完成吗?也许有特定的算法?

首先让我们看一下因素

1¹         2¹         3¹         4¹
    1¹⋅2¹      2¹⋅3¹      3¹⋅4¹
       1¹⋅2²⋅3¹    2¹⋅3²⋅4¹
            1¹⋅2³⋅3³⋅4¹

如果您查看指数,您会看到帕斯卡三角形。

所以乘法金字塔最后一个元素的公式是

pn = Πk=1,...,n nbinom(n-1,k-1)

现在你 "only" 必须得到结果的第一个数字 d<sub>n</sub>。您可以通过计算

dn = floor( pn / 10floor( log10(pn) ) )
   = floor( 10log10(pn) / 10floor( log10(pn) ) )
   = floor( 10log10(pn) - floor( log10(pn) ) )

为了避免巨大的数字,你可以直接通过

计算log(p<sub>n</sub>)
log(pn) = Σk=1,...,n binom(n-1,k-1)⋅log(k)

示例:

d₄ = floor( 10log₁₀(864) - floor( log₁₀(864) ) ) 
   = floor( 102.936513742 - 2 )
   = floor( 100.936513742)
   = floor( 8.64 )
   = 8

要计算 log(p<sub>n</sub>),您必须进行 n 乘法和 n-1 加法.在此之后,您只需计算固定数量的操作,因此这将是 运行 in O(n).