【题目】
【分析】 看起来挺简单的。有几个0,说明乘出来了几个10。 怎么才能有10呢?比如15!=1*2*3*4*5*6*7*8*9*10*11*12*13*14*15,可以看到2*5得到一个10,10本身有一个10。虽然4*5也得到10,但是5被2用了,就没有了。所以每10个数可以产生两个10,或者每5个数产生1个10。
代码: 结果:
不对哎。。。为啥呢? 因为25 = 5*5,25*4 = 100,可以得到两个0。
我们换一种思路。最后的结果后面有几个0,说明相乘得到了几个10。而前面的数可以分解为质数的乘积,10也能分解为质数的乘积。10只能分解为2*5。又因为前面的数分解的质数中2的数量远大于5的数量。所以:前面的数可以分出多少个5,说明就能产生多少个0。 现在的问题是怎么知道n!能分解出多少个5。
我们来分析一下,比如,n=125.能产生5的有: 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 我们先让每一个数拿出一个5。共得到100/5 = 25个。这时候就变成了: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
这里面还能拿出5来的只有: 5 10 15 20 25 让他们每一个拿出一个5来。再得到25/5 = 5个。这时候他们变成了: 1 2 3 4 5
这里面还能拿出5的只有: 5 让它拿一个5出来。再得到5/5=1个。 最终共得到:25+5+1=31个5。对应31个0。
【代码】
【结果】
|