前一段時間看到一個往年程序競賽的題解, 有一個題目說的是求 100 的階乘末尾有多少個 0. 題解中給出的講解提到, 一個數 n
的階乘末尾有多少個 0 取決于從 1 到 n 的各個數的因子中 2 和 5 的個數, 而 2 的個數是遠遠多余 5 的個數的, 因此求出 5
的個數即可. 題解中給出的求解因子 5 的個數的方法是用 n 不斷除以 5, 直到結果為 0, 然后把中間得到的結果累加. 例如, 100/5
= 20, 20/5 = 4, 4/5 = 0, 則 1 到 100 中因子 5 的個數為 (20 + 4 + 0) = 24 個, 即
100 的階乘末尾有 24 個 0. 其實不斷除以 5, 是因為每間隔 5 個數有一個數可以被 5 整除, 然后在這些可被 5 整除的數中,
每間隔 5 個數又有一個可以被 25 整除, 故要再除一次, ... 直到結果為 0, 表示沒有能繼續被 5 整除的數了.
今天無
意間看到有人問 1000 的階乘有幾位數, 上來就用上面的方法算了一下, 249, 又讀一遍題目, 才發現是求所有的位數,
想了好久也沒有思路, 無奈用 Python 算了一把, 結果有 2568 位, 可是依然不知道如何計算 1000 階乘的位數,
還好通過結果驗證了末尾有 249 個 0 是正確的...