LeetCode - 阶乘后的零
思路:我们将 n! 进行质因数分解,使它由质数相乘得来,即 n ! = 2 x × 3 y × 5 z × 7 w × . . . n!=2^x \times 3^y \times 5^z \times 7^w \times ... n!=2x×3y×5z×7w×...,这样10只能由 2 × 5 2 \times 5 2×5产生,而2的个数要比5的个数多,因为从1开始数,每连续两个自然数就有一个2的倍数,可以提取一个2因子,而每连续五个自然数才有一个5的倍数,所以2的个数要比5的个数多得多。这样我们只要计算出z就可以。
要计算z很简单,看n!能分解出多少个5因子。先计算1~n中有多少个是5的倍数,显然有n/5个,我们从这些数中提取n/5个5因子。而25的倍数,同时也是5的倍数,可以提取两个5因子,有一个已经计算在n/5里面,所以我们再计算出1~n中有多少个是25的倍数,从中我们可以再提取n/25个5因子。125的倍数可以提取三个5因子,以此类推,最后 z = n / 5 + n / 5 2 + n / 5 3 + . . . z=n/5+n/5^2+n/5^3+... z=n/5+n/52+n/53+... 。
伪代码:
int count = 0;
while(n > 0){
count += n/5;
n /= 5;
}