• 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;
    }
    
  • 相关阅读:
    C# 根据二级栏目Id查询出所属文章的信息列表
    C#网站首页制作MVC
    C#Mvc退出登录
    C#Mvc修改密码
    C#网站开发之内容页Content
    C#Mvc登录功能
    Linux命令——shell
    学习笔记cisco常用命令
    性能相关术语
    Linux命令(一)
  • 原文地址:https://www.cnblogs.com/seeken/p/5653487.html
Copyright © 2020-2023  润新知