Factorial Trailing Zeros

来源:互联网 发布:java 不同包调用数组 编辑:程序博客网 时间:2024/04/29 10:38

leetcode question

Given an integer n, return the number of trailing zeroes in n!.Your solution should be in logarithmic time complexity.

need to pay attention basic situation is N <= 0, no zero!  cause 0! = 1;


Solution: 点击打开链接 idea from geeksforgeeks

A zero is produced by prime factor 2 * 5, so we can just count number of 2s and 5s. I

We always have enough 2s , which means 2s more than 5s. So we can just count the number of 5s.

To count number of 5s in prime factors of n! in ( logN ) time

Trailing 0s in n!  =  Count of 5s in prime factors of n!
      = floor(n/5) + floor(n/25) + floor(n/125) + ....


eg 28! 28/ 5 = 5 already count all 5 (5, 10 ,15, 20 ,25)

28 / 25 = 1 count extra 5( in 5 * 5) 

28 /125 = 0 count extra 5 (in 25 * 5)

pay attention to overflow

<span style="white-space:pre"></span>public int trailingZeroes(int n) {    int count = 0;    if(n <= 0){    return 0;    }    // Keep dividing n by powers of 5 and update count    long i;    for (i = 5; n/i >= 1; i *= 5){    count += n/i;    }    return count;        <span style="white-space:pre"></span>}


0 0
原创粉丝点击