计算 100! (100的阶乘)的末尾有几个0


可采用因子分解的方式,每个0,都可以看作是 * 10,而10可以分解为 2 * 5,所以只要将每个数都进行因子分解,收集2和5的个数,其他非2和5的因子与末尾有多少个0无关。
PHP代码如下:

<?php
echo '用时:', ($endAt - $startAt);
?>

经过计算,100的阶乘末尾有24个0,用时小于1ms.

为了校验结果的准确性,可以用大数相乘算法计算出100!的精确值,我这边用了Common Lisp计算了100!的值,与结果吻合。

(defun factorial(n)
  (if (> n 1)
      (* n (factorial (- n 1)))
      1))
(factorial 100)

;;output 9332621544394415268169923885626670049071596826438162
1468592963895217599993229915608941463976156518286253697920827
223758251185210916864000000000000000000000000

,

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注