【笔记】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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值