给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
首先想的是暴力列举
1 | import math |
这样一来如果输入一个999之类的,绝对爆了时间复杂度,题目要求说时间复杂度要O(log n),然后想到能产生0 的数就只有5为结尾的,5×2=10
25×4=100
125×8=1000
所以能不能数一下这个n!里面包含有多少个5和多少个2呢,一个一个数也不太现实,就想到了类似于素数筛的算法把2和5的倍数筛出来,代码如下
1 | def func(n): |
后来一看,遇上10*9这样的,在pow()
那一步就错了,emmm……
然后看题解,只需要将每个数字因式分解,找到2×5
的而个数即可,又因为2一定比5多,只需要找有多少个5即可,代码如下
1 | def func(n): |