1×2×3×4×5×…×2010所得数字末尾有多少个0?
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/23 09:32:23
1×2×3×4×5×…×2010所得数字末尾有多少个0?
1×2×3×4×5×…×2010所得数字末尾有多少个0?
1×2×3×4×5×…×2010所得数字末尾有多少个0?
2010/5=402
402/5=80.2
80/5=16
16/5=3.1
3/5=0.3
402+80+16+3+0=501
2010!=2010*2009*.*2*1
末尾0的个数=因子5的个数,(因为偶数2的个数比5多,2*5=10,每遇到一个因数5,末尾就多一个0)
能被5整除的有 2010/5=402个,
能被25整除的有 402/5=80个(每一个这样的数就会多一个因数5)
能被125整除的有80/5=16个
能被625整除的有16/5=3个
所以,2010!的末尾有 501个0.
设有a个10的倍数,b个100的倍数,c个100的倍数,就有a+b+c个0自己慢慢数吧
501
分析:
N!=1×2×3×4×5×6×··· ×N
我们可以对N!进行分解质因数 即
N!=2x ×3y ×5z ··········
可以看到2和5相乘必然会产生一个10,而这个10会在阶乘的末尾添加一个0。那么问题就转化为2x ×5z 可以产生多少个0,即min(x,z),显然X肯定大于Z(能被2整除的数肯定比5多),最终问题转化为求Z的值-即找...
全部展开
501
分析:
N!=1×2×3×4×5×6×··· ×N
我们可以对N!进行分解质因数 即
N!=2x ×3y ×5z ··········
可以看到2和5相乘必然会产生一个10,而这个10会在阶乘的末尾添加一个0。那么问题就转化为2x ×5z 可以产生多少个0,即min(x,z),显然X肯定大于Z(能被2整除的数肯定比5多),最终问题转化为求Z的值-即找出1...N能分解出多少个5
至于分解出多少5,我用了两种方法:
1.我写了一个程序跑了出来
#include
#include
int main()
{
int N=2010;
int ret = 0, i, j;
for(i = 1; i <= N; i++)
{
j = i;
while(j % 5 ==0)
{
ret++;
j /= 5;
}
}
printf("%d\n",ret);
getch();
return 0;
}
2.理论分析
5的n次方倍数的数肯定可以分解出n个5,2010小于5的5次方,大于5的4次方
小于25的数都最多只能分解出1个5,小于125的数最多只能分解出2个5,以此类推,小于5的n次方的数最多能分解出n-1个5。
考虑区间重叠问题。。后者肯定能由前者预先占位,即能5的n次方的倍数的数肯定是5的n-1次方倍数的倍数,且在此倍数位置,后者比前者大一。由此我们很容易得出结论,欲求a的阶乘能分解多少5,就分别求出a除以5的n次方后取整的和。。eg:
124 :124/5+124/25=28
624 :624/5+624/25+624/125=152
2010:2010/5+2010/25+2010/125+2010/624=501
不知道有没有帮助到你。。可能我的表述有点欠缺。。你有不明了的地方可以找我。
收起