LeetCodeOJ_172_Factorial Trailing Zeroes
来源:互联网 发布:lvs 算法 编辑:程序博客网 时间:2024/06/11 01:40
题目:
Given an integer n, return the number of trailing zeroes in n!.
Note: Your solution should be in logarithmic time complexity.
分析:
【转】原地址
结论:对于n的阶乘n!,其因式分解中,如果存在一个因子“5”,那么它必然对应着n!末尾的一个“0”。
证明:
(1)当n < 5时, 结论显然成立。
(2)当n >= 5时,令n!= [5k * 5(k-1) * … * 10 * 5] * a,其中 n = 5k + r (0 <= r <= 4),a是一个不含因子“5”的整数。
对于序列5k, 5(k-1), …, 10, 5中每一个数5i(1 <= i <= k),都含有因子“5”,并且在区间(5(i-1),5i)(1 <= i <= k)内存在偶数,也就是说,a中存在一个因子“2”与5i相对应。即,这里的k个因子“5”与n!末尾的k个“0”一一对应。
我们进一步把n!表示为:n!= 5^k * k! * a(公式1),其中5^k表示5的k次方。很容易利用(1)和迭代法,得出结论1。
令f(x)表示正整数x末尾所含有的“0”的个数, g(x)表示正整数x的因式分解中因子“5”的个数,则:
f(n!) = g(n!) = g(5^k * k! * a) = k + g(k!) = k + f(k!)
所以,最终的计算公式为:
当0 < n < 5时,f(n!) = 0;
当n >= 5时,f(n!) = k + f(k!), 其中 k = n / 5(取整)。
代码:
class Solution {public: int trailingZeroes(int n) { int result=0; int m=n/5; if(m==0) result=0; else result=m+trailingZeroes(m); return result; }};
结果:
- LeetCodeOJ_172_Factorial Trailing Zeroes
- Trailing Zeroes
- Trailing Zeroes
- Factorial Trailing Zeroes
- Factorial Trailing Zeroes
- Factorial Trailing Zeroes
- Factorial Trailing Zeroes
- [leetcode]Factorial Trailing Zeroes
- [LeetCode] Factorial Trailing Zeroes
- Leetcode Factorial Trailing Zeroes
- Leetcode: Factorial Trailing Zeroes
- 【Leetcode】Factorial Trailing Zeroes
- Factorial Trailing Zeroes
- Leetcode_172_Factorial Trailing Zeroes
- leetcode:Factorial Trailing Zeroes
- Java-Factorial Trailing Zeroes
- Factorial Trailing Zeroes (Java)
- Factorial Trailing Zeroes
- Codeforces 501D Misha and Permutations Summation (康托展开+平衡树优化)
- 020.Comma Operator 逗号运算符
- 第三方登录(一)
- [leetcode] 172.Factorial Trailing Zeroes
- 文件复制
- LeetCodeOJ_172_Factorial Trailing Zeroes
- Java构造方法注意事项
- 幽灵按钮css3
- Codeforces Round #312 (Div. 2) E. A Simple Task 线段树 延时标记
- 程序中变量的存储
- java设计模式学习之策略模式
- 求二叉树的深度,判定二叉树是否是平衡二叉树(java)
- hdu 3449(依赖背包) Consumer
- JS算法*START寻找最短路径