在特定数字系统中,如何计算数字的阶乘尾随零?
让我们看一下我们处于第十数字系统时的情况,然后看看如何将其推广到通用解决方案中。 给定数字N,并且要得到阶乘数,我们需要找到尾随零的数目。 解决方案将非常简单-总和:
Math.floor(N/5) + Math.floor(N/25) + Math.floor(N/125) + Math.floor(N/625) + ...
我们可以将其概括为以下公式:
为什么是5? 很简单 仅当阶乘中的数字为10时才获得最终的零,因此,通过计算阶乘中的十个数,我们可以得出有限零的数量。
为什么在上面的示例中我们除以5? 因为可以通过将5乘以2来获得10。因此,完整的解决方案将具有两个公式:
和
但是,从逻辑上讲,我们知道第一个数量会更少,因此我们只需要计算它(更多详细信息可以在
此处找到)。
解决我们的问题
为了计算特定数字系统中数字阶乘的最终零,我编译了以下
算法 :
- 分解数字系统的数字B。
- 将数字N除以每个唯一质数K,然后将K自身相乘直到 将大于一个,同时将每个结果四舍五入为一个较小的整数。
- 如果在扩展数字系统的数目时,我们得到几个相同的质因子K,则以上结果应除以相同的K数。
- 在N除以每个唯一因子K的所有除法中,选择最小商,这将是我们的答案。
我将通过一个例子来展示它。
令数字N = 5,数字系统B =12。阶乘5! = 120,第12个系统中的120是A0。 我们看到在有限数系统中,原始数的阶乘具有一个零。 如果将12分解为素因子,则得到2、2、3。我们有两个唯一的数字:2和3。按照我们的算法,我们将用数字2满足点2。
但是在12的分解中,演绎相遇了两次,因此我们将最终结果除以2,然后四舍五入为较小的整数。 结果,我们得到1。
我们对3做同样的事情:
这样,我们得到了数N除以数系统数质数的两个商。 它们都等于1,因此我们不必选择较小的值,而只需给出答案-1。
考虑另一个例子。
令数字N = 16,数字系统B =16。阶乘16! =第16个系统中的20922789888000和20922789888000-130777758000。我们看到在最终数字系统中,原始数字的阶乘有三个零。 如果将16分解为素数,则得到2、2、2、2。这里只有一个唯一的数字,因此,第2项仅执行一次:
分解时,我们有四个减法,因此我们将除法之和除以4并舍入为较小的整数:
附言:该职位的大部分材料都
从这里翻译
而来 。
阿迪亚拉梅什 (
Aditya Ramesh)发表。