`
wen866595
  • 浏览: 268488 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

计算n!末尾所包含0的个数

 
阅读更多

转自:http://blog.csdn.net/waitfor_/article/details/7213288

 

 

例如,5!=120,其末尾所含有的“0”的个数为1;10!= 3628800,其末尾所含有的“0”的个数为2;20!= 2432902008176640000,其末尾所含有的“0”的个数为4。

这里先给出其计算公式,后面给出推导过程。令f(x)表示正整数x末尾所含有的“0”的个数,则有: 


      当0 < n < 5时,f(n!) = 0; 


      当n >= 5时,f(n!) = k + f(k!), 其中 k = n / 5(取整)。

从而可以递归求解。

证明:

           先证明一个结论。

           结论1: 对于n的阶乘n!,其因式分解中,如果存在一个因子“5”,那么它必然对应着n!末尾的一个“0”。

                         证明:首先我们知道在一堆乘法中产生0的途径只有2*5得到10,所以有几对2,5就可以得到几个0.下面我们可以将n!分解,n!= [5k * 5(k-1) * ... * 10 * 5] * a,其中 n = 5k + r (0 <= r <= 4),a是一个不含因子“5”的整数。对于序列5,10,15,······,5(k-1),5k,中每一个数都含有因子5,并且在区间(5(k- 1),5k) 内总有一个2产生一个0,将上述序列提出一个5得到n!= 5^k * k! * a,其中k!可以递归的得到其满足结论1.

           有了上面的结论,我们知道f(n!) 只与5因子个数有关。f(n!) =  f(5^k * k! * a) = k + f(k!) = k + f(k!),其中k = n / 5(取整)。

分享到:
评论

相关推荐

    C++版本计算n阶乘末尾0的个数原理讲解及代码实现

    ### C++版本计算n阶乘末尾0的个数原理讲解及代码实现 #### 概述 本篇文章主要介绍如何使用C++编程语言来计算一个正整数n的阶乘末尾0的数量,并通过示例代码加以说明。该方法不仅阐述了理论基础,还提供了具体的实现...

    n的阶乘问题--阶乘位数--阶乘末尾0的个数

    本文将深入探讨“n的阶乘问题”,包括阶乘的定义、计算阶乘位数的方法以及如何确定阶乘末尾零的个数。 首先,阶乘是指一个正整数n与小于等于它的所有正整数的乘积。用数学符号表示为`n! = n × (n-1) × (n-2) × ....

    C++计算一个数字的二进制中0或1的个数原理及代码

    ### C++ 计算一个数字的二进制中0或1的个数原理及代码解析 在计算机科学中,二进制表示法是基础之一,它不仅被用于数据存储,还在算法设计、加密技术以及系统优化等多个方面发挥着重要作用。本篇文章将详细探讨如何...

    java阶乘计算获得结果末尾0的个数代码实现

    在Java编程中,计算阶乘并...总结一下,确定阶乘末尾零的个数关键在于找到n中因子5的总数。对于较大的n,这个方法不仅效率高,而且节省了计算资源。在实际编程中,理解和应用这种策略对于优化算法和解决问题至关重要。

    2011国信蓝点杯试题

    因此,计算n!中因子5的个数即可,可以采用循环或递归方法,每次除以5并将商继续除以5,累计除法结果的个数。 三、字符串乘方 题目要求找出字符串s可以表示为某个字符串a的幂的最大指数n。这需要使用动态规划的思想...

    用C语言实现n!最后一位非零数字的算法与程序分析.pdf

    程序实现的思想主要包括两个步骤:首先,计算阶乘数列中不能再被分解为5的个数P;然后,去除P个2的乘数因子,这样就可以避免在乘法运算中产生额外的零,同时减少了对有效位的需求。这种方法既保证了计算的准确性,又...

    不要被阶乘吓倒(各种阶乘)

    中因子 5 的个数可以通过累加 N 中所有 5 的倍数来获得,包括 5^2、5^3 等。因此,我们可以使用以下公式来计算: \[ Z = \left\lfloor \frac{N}{5} \right\rfloor + \left\lfloor \frac{N}{5^2} \right\rfloor + \...

    c语言编程题之数学问题阶乘后的0.zip

    )后,结果末尾包含的零的数量。这个问题涉及到数论中的因子分解和质因数5。我们知道,任何正整数的阶乘都会包含大量的2和5作为因子,因为2的因子总是比5多,所以阶乘后的0的个数由5的因子数量决定。下面将详细介绍...

    千万不要被阶乘吓倒

    **解法二** 是通过计算N的二进制表示中1的个数,然后用N减去这个数目,因为N!中因子2的个数等于N减去1的个数。 总结,理解和巧妙地处理阶乘问题不仅可以提升我们的编程技巧,还能锻炼我们的逻辑思维和问题解决能力...

    江苏省江阴市��山湾实验学校创新2班2015_2016学年七年级数学上学期期中试题苏科版

    末尾是0,之后的阶乘末尾都是0。所以,1!+2!+3!+…+10!的末尾数为5。 11. **科学记数法**:将803万转换成科学记数法,即8030000=8.03×10^6。 12. **同类项**:同类项指的是字母相同,指数相同的项。根据“单项式...

    初等数论复习提纲1.docx

    末尾连续零的个数**:末尾零的个数由2和5的因子对数决定,因为10=2×5。1999!中2的因子比5的因子多,所以只取决于5的因子。 10. **3103除以11的余数**:这可以通过模运算计算得出。 11. **欧拉定理**:如果(a, p)=...

    usaco3.2解题报告1

    它可以通过递归关系`sizeofset(n, m) = sizeofset(n-1, m) + sizeofset(n-1, m-1)`计算,其中基数情况是`sizeofset(0, m) = 1`。 - 为了找到第i小的满足条件的二进制数,我们需要找到一个分割点,使得以0开头的数的...

    JavaScript 特有方法计算二进制中1的个数 split方法

    此外,Chrome和Opera浏览器中,对于不以“1”结尾的二进制字符串,`split(/0*/)`可能会在结果数组的末尾多一个空项,导致计算结果偏大。 为了解决这些问题并提高效率,我们可以使用"1"作为`split`方法的分隔符,...

    求1000阶乘的结果末尾有多少个0

    3. **结束条件**:由于每次2的因子都会找到一个与之匹配的5的因子(除了那些包含额外5因子的数),我们只需要计算`count5`来确定末尾零的个数。因为对于每一对2和5,它们会产生一个10,也就是一个零。然而,由于可能...

    10.4.3二项式定理 的应用.doc

    7. 求解一个数的末尾连续零的个数通常涉及到因数5的个数,需要更具体的信息才能解答。 8. 若(a + b)^n = a^n + b^n,那么n必须为0或1,因为这是唯一能使加法变为乘法的情况。 9. 要证明2^n能被64整除,需要n至少为6...

    ACM编程比赛入门模拟题目(共10道题)

    `的末尾非0数字即可。 **示例代码框架:** ```python def lastNonZeroDigit(n): if n return factorial(n) % 10 even = odd = 0 while n &gt; 0: if n % 10 % 2 == 0: even += 1 else: odd += 1 n //= 5 ...

    计算机二级c语言上机考试题库节选

    在C语言中,上机考试通常涉及程序设计与调试,本题库节选包含三个题目,分别涉及到统计长整数各位数字出现次数、统计无符号整数中零的个数以及计算特定序列的多项式值。 **第一题**:统计长整数 n 的各个位上出现...

    大数运算模板(C++)

    8. 求末尾0个数:该模板可以计算大数的末尾0个数,即计算大数末尾的0的个数。 9. 求长度:该模板可以计算大数的长度,即计算大数的位数。 该模板的实现细节: * 使用了#define指令来定义一些常量,如DIGIT、DEPTH...

    历年国家计算机二级_C语言上机国二真题整理100套

    - 第一处错误:在计算阶乘的初始条件中,`if(n==0) return 1.0;` 应该改为`if(n &lt;= 0) return 1.0;`,以处理0和负数的情况。 - 第二处错误:循环条件应改为`while(n &gt; 1)`,因为当`n`小于等于1时,应该停止乘法...

    ACM编程比赛入门题库

    - **除法和取模操作:** 在计算过程中,可以使用除法和取模运算来逐步消除末尾的0,并找到最后一位非零数字。 - **优化算法:** 通过观察和归纳可以发现规律性模式,从而减少计算量。 **示例代码结构:** ```python...

Global site tag (gtag.js) - Google Analytics