查找析因数的因子和结束零

时间:2013-02-07 07:04:10

标签: c

我有问题。我想找到大数字的因子。

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。

这是我的问题。通过使用上面的公式,我得到了两个不同的答案,我很困惑,我没有得到完美的答案,所以请帮我找到它。

谢谢......

2 个答案:

答案 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个(确实如此)。

现在你的工作是证明(或反驳)这种模式将会存在,然后想出一种方法来编码它。