zoukankan      html  css  js  c++  java
  • 100阶乘末尾有多少个零

    100! = 1 * 2 * 3 * ... * 99 * 100

    如果结尾要有0,必然是有两个数字相乘进位了,而10 = 2 * 5,所以一个数字末尾有多少个0,取决于它分解因子后,有多少个2和有多少个5,假设2的个数为m5的个数为n,那么最终的结果为min(m,n),而根据实际情况,当数字大于10且末尾有0的时候,显然2的个数必然大于等于5的个数,所以最终的结果取决于因子5的个数,也就是说,一个数字末尾0的个数取决于其分解因子之后5的个数,前提是它必然有0,用f(n)来表示数n末尾0的个数,即包含的因子5的个数,则100!末尾0的个数就可以表示为f(100!) = f(100) + f(99) + f(98) + ... + f(2) + f(1),其中

    100末尾有20,即有2个因子5f(100) = 2,

    99末尾没有0,也没有因子5,即f(98) = 0

    ...

    95末尾没有0,有因子5一个,即f(95) = 1

    ...

    5末尾没有0,有因子5一个,即f(5) = 1

    ...

    F(100!) = f(100) + f(99) + f(98) + ... + f(2) + f(1) = 2 + 20 + 1 + 1 = 24

    此处进一步讨论任意一个数n,其含有的因子5的个数,

    int f(int n)
    {
            int ret = 0;
            while(n)
            {
                    if(0 == n % 5)
                    {
                            n /= 5;
                            ++ret;
                    }
                    else
                    {
                            break;
                    }
            }
            return ret;
    }
    

    现在进一步问N!末尾有几个0

    int g(int n)
    {
            if(n < 5)
            {
                    return 0;
            }
            int sum = 0;
            for(int i = 1; i <= n; ++i)
            {
                    sum += f(i);
            }
            return sum;
    }
    
  • 相关阅读:
    HTTP断点续传 规格严格
    Java Shutdown 规格严格
    linux 命令源码 规格严格
    JTable调整列宽 规格严格
    linux 多CPU 规格严格
    Hello can not find git path 规格严格
    Kill 规格严格
    拜拜牛人 规格严格
    Swing 规格严格
    Debugging hangs in JVM (on AIX but methodology applicable to other platforms) 规格严格
  • 原文地址:https://www.cnblogs.com/seeken/p/5653487.html
Copyright © 2011-2022 走看看