题目描述 链接戳这里
解法:
《编程之美》书里有讲
N!能产生0的质数组合只能是2 * 5,也就是说当对N!进行质数分解之后
N!末尾 0 的个数取决于从 1 到 n 的各个数的因子中 2 和 5 的个数的较小的那个,但又因为能被2整除的数出现的频率比能被5整除的数高得多,且出现一个5的时,最少会同时出现一个2,所以最小值就是5出现的个数。即求出5出现的个数就可以得到N!末尾0的个数。
求5出现的个数
n的阶乘 就是 1x2x3x4x5x6........xn
各个因子中5的个数 就是 n累除以5 得到的数字累加 直到 得到0
比如 25 = 1x2x3x4x5x6......x25 这里面每个数进行质因数分解 会得到6个五,其中5,10,15,20各自有一个 25有两个
25/5 =5 5/5=1 1/5=0 5+1+0=6;
为什么 这样解呢 因为 分解质因数后 5,10,15,20各自贡献一个 25贡献两个 125 贡献三个 以此类推
所以 这里面出现的5的次数 就是 =【n/5】+【n/25】+【n/125】......
扫描二维码关注公众号,回复:
4312887 查看本文章
所以就是n累除5 计数就好了
代码
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
const int maxn=1e5+7;
typedef long long ll;
ll n;
int main(){
scanf("%lld",&n);
ll sum=0;
while(n){
sum+=n/5;
n/=5;
}
printf("%lld",sum);
return 0;
}