跳到主要内容

阶乘后 零 的个数

给定一个整数 n ,返回 n! 结果中尾随零的数量。

提示n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1

/*
求n!
0的来源 2 * 5 所以一对2和5即可产生一个0,所以0的个数即为min(阶乘中5的个数和2的个数)
又因为是2的倍数的数一定比是5的倍数的数多 所以2的个数一定>=5的个数 所以只需要统计 5 的个数了
例如 5! = 1 * 2 * 3 * 4 * 5
2 2 2 5 一个2和一个5配对出现0 所以5!末尾只有一个零
而在 n = 25 时 可以产生5的有 5 10 15 20 25
即 n/5 = 5个 然鹅 25 = 5*5 所以少算了一个5
n>=25时,故而需要补上它 因此所有可以产生25的也要加上
即为 n/5 + n/25 然鹅 125 = 5*25 所以又少算了一个5
n>=125时,故而需要补上它 因此所有可以产生125的也要加上
即为 n/5 + n/25 + n/125 然鹅 625 = 5*125 所以又少算了一个5
继续补上...
所以最终为 n/5 + n/25 + n/125 + n/625 + ...
即 n/5 + n/5/5 + n/5/5/5 + n/5/5/5/5 + ...
代码如下
*/
int trailingZeroes(int n) {
int five = 0;
while(n >= 5){
five += n/5;
n/=5;
}
return five;
}
C++

推广: 求 n!n! 中因子 pp 的个数

则因为 n!=12...nn! = 1*2*...*n

所以含有一个 pp 的有 np\frac{n}{p}

含有两个 pp 的有 np2\frac{n}{p^2}

...

把以上全部加起来即为答案了

res=np+np2+np3+...res = \lfloor \frac{n}{p} \rfloor + \lfloor \frac{n}{p^2} \rfloor + \lfloor \frac{n}{p^3} \rfloor +...

请作者喝奶茶:
Alipay IconQR Code
Alipay IconQR Code
本文遵循 CC CC 4.0 BY-SA 版权协议, 转载请标明出处
Loading Comments...