我有问题。我想找到大数字的因子。
Ex:1555! =? 195! =?。
我的主要问题是我想知道阶乘数的结尾0的确切数目。
我使用以下公式: (m!)^ n = m! = 2 * 10 ^(n-1)+ 2 ^ 2 * 10 ^(n-2)+ ------- + 2 ^ n。
有了这个,我可以像这样解决结尾0的其他因子。
100!= 2 * 10 ^ 1 + 2 ^ 2 * 10 ^ 0 = 20 + 4 = 24
100!根据此计算,有24个结束0。
但是,我还有其他问题,
前:对于95!
i)95! =(100 - 5)! = 24-2 * 5 ^(1-1)= 24-2 = 22 => 95!有22 0。
ii)95! =(90 + 5)! = 9 *(2 * 10 ^ 0)+ 2 * 5 ^ 0)= 18 + 2 = 20 => 95!有20 0。
这是我的问题。通过使用上面的公式,我得到了两个不同的答案,我很困惑,我没有得到完美的答案,所以请帮我找到它。谢谢......
答案 0 :(得分:3)
n中的尾随零数!是序列1,2,...,n中5的因子数。这是因为尾随零是结果中10的因子数,10是具有5 x 2的素因数因子。总是因子2比5更多,因此5的数量给出了结果。
5的因子数是...... [n/5] + [n/25] + ... + [n/(5^k)] + ...
,其中[ ]
表示向下舍入( floor )。
计算代码应该是什么样的?也许是这样的事情。
int trailing_factorial_zeros(int n) {
int result = 0;
int m5 = 5;
while (n >= m5) {
result += n / m5;
m5 *= 5;
}
return result;
}
答案 1 :(得分:2)
这是一个糟糕的问题,无论如何都可能属于数学网站。但是这是给你的想法:
前100! = 100 * 99!
99! = 99 * 98!等等,直到 1! = 1,和0! = 1。
你想知道N中有多少尾随0! (至少这是我理解这个问题的方式)。
想想10个人中有多少人!
10! = 3628800
所以有两个。原因是因为只有2 * 5 =一个尾随0和10的数字所以我们总共有2.(5 * 4有一个尾随0但是4是2的倍数,此外,我们只得到将个别数字乘以一次)
这是一个很好的选择,然后,那20!有4个(确实如此)。
现在你的工作是证明(或反驳)这种模式将会存在,然后想出一种方法来编码它。