例如( n = 4):
1 2 3 4
2 6 12
12 72
864
我必须找到最终号码的第一个数字。这可以在O( N )中完成吗?也许有一个特定的算法?
答案 0 :(得分:2)
首先让我们看看因素
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)
现在你只有"必须得到结果的第一个数字dn
。你可以通过计算
dn = floor( pn / 10floor( log10(pn) ) ) = floor( 10log10(pn) / 10floor( log10(pn) ) ) = floor( 10log10(pn) - floor( log10(pn) ) )
为了避免巨大数字,您可以直接通过
计算log(pn)
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(pn)
,您必须进行n
次乘法和n-1
次加法。在此之后,您只需计算一定数量的操作,因此这将在O(n)
。