1401 Factorial:一个数阶乘末尾有几个零,小白详细推导

本文介绍了一种高效计算N!(N阶乘)末尾零数量的方法,通过分析因子2和5的分布,提出了一种递进的计算策略,以统计所有5的幂次在N!中出现的次数。

题目大意

题目链接
给定一个数 1 ≤ N ≤ 1 0 9 1\leq N\leq10^9 1N109,求出 N ! N! N!末尾的零的数目。

思路分析

看到好多人说水题,代码确实很短,思路也很简洁,不过他们都没有考虑到还有我这样看不懂题又找不到规律的弱者。

首先,数据范围太大,打表out。


观察一下可以产生末尾0的最小数10,我们有 10 = 2 ∗ 5 10=2*5 10=25。也就是说对两个数只要能凑出一对2*5,就会产生一个0。我们求 N ! N! N!末尾有多少个0,转化成 N ! N! N!能分解出多少2*5因子。我们可以进一步将问题简化为,求 N ! N! N!拆分成的因子中有多少个5。为什么是5,不是2,是因为2出现的频率比5高。每一个偶数都可以拆分成 2 n 2n 2n的形式,显然这是比5的倍数多的。

那么重点就在于,如何计算某个数能拆成多少个5,我们从20开始

20 ! = 20 ∗ . . . ∗ 15 ∗ . . . ∗ 10 ∗ . . . ∗ 5 ∗ . . . ∗ 1 = 2432902008176640000 20!=20*...*15*...*10*...*5*...*1=2432902008176640000 20!=20...15...

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值