您的位置:首页 > 大数据 > 人工智能

LeetCode--172. Factorial Trailing Zeroes

2016-03-05 16:47 555 查看
Problem:

Given an integer n, return the number of trailing zeroes in n!.

Note: Your solution should be in logarithmic time complexity.

Analysis:

对n!做质因数分解n!=2x*3y*5z*… 显然0的个数等于min(x,z),并且min(x,z)==z

证明:

对于阶乘而言,也就是1*2*3*…*n [n/k]代表1~n中能被k整除的个数 那么很显然 [n/2] > [n/5]

(左边是逢2增1,右边是逢5增1) [n/2^2] > n/5^2 …… [n/2^p] >

n/5^p 随着幂次p的上升,出现2^p的概率会远大于出现5^p的概率。

因此左边的加和一定大于右边的加和,也就是n!质因数分解中,2的次幂一定大于5的次幂

还有一点要注意的就是25这种,5和5相乘的结果,所以,还要看n/5里面有多少个5,也就相当于看n里面有多少个25,还有125,625,,,

例如n=25, n!=25*24*23*…15…*10…*5…*1=(5*5)*24*23…(5*3)…(5*2)…(5*1)…*1,其中25可看成5*5,多了一个5,应该加上

//处理这个问题也很简单,首先对n÷5,移除所有的单个5,然后÷25,移除额外的5,以此类推。下面是归纳出的计算后缀0的公式。

//n!后缀0的个数 = n!质因子中5的个数= floor(n / 5) + floor(n / 25) + floor(n / 125) + ….

Answer:

public class Solution {
public int trailingZeroes(int n) {
int count=0;
while(n/5 !=0){
n = n / 5;
count += n;
}
return count;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: