对于任意一个正整数,我们都可以利用唯一分解定理将其分解为一系列质数的乘积。
即 这样的形式
考虑N!后面的0是由2*5 = 10所贡献的,这样就可以转而寻找z = min(a,c) [a和c是2和5的指数]
由于在N!中能分解出的2一点比能分解的5多[这句看不懂可以写一下N!找一下里面从1-n的中含2的数和含5的数],所以问题就是找到最小的c,就是0的个数。
#include<iostream>
using namespace std;
int main()
{
int n,res=0;
cin>>n;
for(int i=1,k=1; i<=n; k=++i) //写一行就很简洁
{
while(!(k%5)) //找出k中含有多少个5
{
res++;
k/=5;
}
}
cout<<res;
return 0;
}