【筆記】100的階乘中有多少個末尾0?

問題

100的階乘(100!)中的末尾有多少個0?

分析

2 * 5 = 10,所以每個2, 5對就能形成一個末尾0,解決這個問題就在於找出100內有多少個2, 5對。

由於100內含2因子的數量要大於含5因子的數量,所以簡化爲100內含多少個5因子的問題。

直覺上:5, 10, 20, 25, ... 90, 95, 100這20個數字內有5因子。但需要注意的是25, 50, 75, 100這4個數含5 * 5也就是兩個5因子,所以要算兩次。

綜上,100內含24個5因子,所以24個2, 5對,也就是100!有24個末尾0.

推廣

如果把問題從100!推廣到N!呢?

同樣要考慮2, 5對, 考慮含5因子的數量。

不同的是,N內可能含5 * 5, 5 * 5 * 5… 需要重新考慮。

代碼

python 調用 math.factorial()計算階乘

計算末尾0的代碼

# -*- coding: utf-8 -*-
"""
Created on Sat Mar 18 15:38:56 2017

@author: lwx
"""
import math

def count_0(n):
    count = 0
    i = 1

    while 5 ** i < n:
        count += n / (5 ** i)
        i += 1

    return count

if __name__ == '__main__':
    n = 100
    num_of_0 = count_0(100)
    n_factorial = math.factorial(n)
    print('%d! = %d' % (n, n_factorial))
    print('%d!的末尾0個數爲: %d' % (n, num_of_0))

out:

100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
100!的末尾0個數爲: 24
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章