Python写算法之数字乘积后面有多少个0

来源:互联网 发布:java书籍百度云盘资源 编辑:程序博客网 时间:2024/06/06 14:26
从1到10,连续10个整数相乘: 1×2×3×4×5×6×7×8×9×10。 连乘积的末尾有几个0? 答案是两个0。其中,从因数10得到1个0,从因数2和5相乘又得到1个0,共计两个。 刚好两个0?会不会再多几个呢? 如果不相信,可以把乘积计算出来,结果得到 原式=3628800。你看,乘积的末尾刚好两个0,想多1个也没有。 那么,如果扩大规模,拉长队伍呢?譬如说,从1乘到20: 1×2×3×4×…×19×20。这时乘积的末尾共有几个0呢? 现在答案变成4个0。其中,从因数10得到1个0,从20得到1个0,从5和2相乘得到1个0,从15和4相乘又得到1个0,共计4个0。 刚好4个0?会不会再多几个? 请放心,多不了。要想在乘积末尾得到一个0,就要有一个质因数5和一个质因数2配对相乘。在乘积的质因数里,2多、5少。有一个质因数5,乘积末尾才有一个0。从1乘到20,只有5、10、15、20里面各有一个质因数5,乘积末尾只可能有4个0,再也多不出来了。 把规模再扩大一点,从1乘到30: 1×2×3×4×…×29×30。现在乘积的末尾共有几个0? 很明显,至少有6个0。 你看,从1到30,这里面的5、10、15、20、25和30都是5的倍数。从它们每个数可以得到1个0;它们共有6个数,可以得到6个0。 刚好6个0?会不会再多一些呢? 能多不能多,全看质因数5的个数。25是5的平方,含有两个质因数5,这里多出1个5来。从1乘到30,虽然30个因数中只有6个是5的倍数,但是却含有7个质因数5。所以乘积的末尾共有7个0。 乘到30的会做了,无论多大范围的也就会做了。 例如,这次乘多一些,从1乘到100: 1×2×3×4×…×99×100。现在的乘积末尾共有多少个0? 答案是24个。
L = [2,8,3,50]counts1, counts2 = 0, 0def digui(s, e):if s % e != 0:return 0return digui(s / e, e) + 1for each in L:counts1 += digui(each, 2)counts2 += digui(each, 5)print min(counts1, counts2)


0 0
原创粉丝点击