转自: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的数量,并通过示例代码加以说明。该方法不仅阐述了理论基础,还提供了具体的实现...
本文将深入探讨“n的阶乘问题”,包括阶乘的定义、计算阶乘位数的方法以及如何确定阶乘末尾零的个数。 首先,阶乘是指一个正整数n与小于等于它的所有正整数的乘积。用数学符号表示为`n! = n × (n-1) × (n-2) × ....
### C++ 计算一个数字的二进制中0或1的个数原理及代码解析 在计算机科学中,二进制表示法是基础之一,它不仅被用于数据存储,还在算法设计、加密技术以及系统优化等多个方面发挥着重要作用。本篇文章将详细探讨如何...
在Java编程中,计算阶乘并...总结一下,确定阶乘末尾零的个数关键在于找到n中因子5的总数。对于较大的n,这个方法不仅效率高,而且节省了计算资源。在实际编程中,理解和应用这种策略对于优化算法和解决问题至关重要。
因此,计算n!中因子5的个数即可,可以采用循环或递归方法,每次除以5并将商继续除以5,累计除法结果的个数。 三、字符串乘方 题目要求找出字符串s可以表示为某个字符串a的幂的最大指数n。这需要使用动态规划的思想...
程序实现的思想主要包括两个步骤:首先,计算阶乘数列中不能再被分解为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 + \...
)后,结果末尾包含的零的数量。这个问题涉及到数论中的因子分解和质因数5。我们知道,任何正整数的阶乘都会包含大量的2和5作为因子,因为2的因子总是比5多,所以阶乘后的0的个数由5的因子数量决定。下面将详细介绍...
**解法二** 是通过计算N的二进制表示中1的个数,然后用N减去这个数目,因为N!中因子2的个数等于N减去1的个数。 总结,理解和巧妙地处理阶乘问题不仅可以提升我们的编程技巧,还能锻炼我们的逻辑思维和问题解决能力...
末尾是0,之后的阶乘末尾都是0。所以,1!+2!+3!+…+10!的末尾数为5。 11. **科学记数法**:将803万转换成科学记数法,即8030000=8.03×10^6。 12. **同类项**:同类项指的是字母相同,指数相同的项。根据“单项式...
末尾连续零的个数**:末尾零的个数由2和5的因子对数决定,因为10=2×5。1999!中2的因子比5的因子多,所以只取决于5的因子。 10. **3103除以11的余数**:这可以通过模运算计算得出。 11. **欧拉定理**:如果(a, p)=...
它可以通过递归关系`sizeofset(n, m) = sizeofset(n-1, m) + sizeofset(n-1, m-1)`计算,其中基数情况是`sizeofset(0, m) = 1`。 - 为了找到第i小的满足条件的二进制数,我们需要找到一个分割点,使得以0开头的数的...
此外,Chrome和Opera浏览器中,对于不以“1”结尾的二进制字符串,`split(/0*/)`可能会在结果数组的末尾多一个空项,导致计算结果偏大。 为了解决这些问题并提高效率,我们可以使用"1"作为`split`方法的分隔符,...
3. **结束条件**:由于每次2的因子都会找到一个与之匹配的5的因子(除了那些包含额外5因子的数),我们只需要计算`count5`来确定末尾零的个数。因为对于每一对2和5,它们会产生一个10,也就是一个零。然而,由于可能...
7. 求解一个数的末尾连续零的个数通常涉及到因数5的个数,需要更具体的信息才能解答。 8. 若(a + b)^n = a^n + b^n,那么n必须为0或1,因为这是唯一能使加法变为乘法的情况。 9. 要证明2^n能被64整除,需要n至少为6...
`的末尾非0数字即可。 **示例代码框架:** ```python def lastNonZeroDigit(n): if n return factorial(n) % 10 even = odd = 0 while n > 0: if n % 10 % 2 == 0: even += 1 else: odd += 1 n //= 5 ...
在C语言中,上机考试通常涉及程序设计与调试,本题库节选包含三个题目,分别涉及到统计长整数各位数字出现次数、统计无符号整数中零的个数以及计算特定序列的多项式值。 **第一题**:统计长整数 n 的各个位上出现...
8. 求末尾0个数:该模板可以计算大数的末尾0个数,即计算大数末尾的0的个数。 9. 求长度:该模板可以计算大数的长度,即计算大数的位数。 该模板的实现细节: * 使用了#define指令来定义一些常量,如DIGIT、DEPTH...
- 第一处错误:在计算阶乘的初始条件中,`if(n==0) return 1.0;` 应该改为`if(n <= 0) return 1.0;`,以处理0和负数的情况。 - 第二处错误:循环条件应改为`while(n > 1)`,因为当`n`小于等于1时,应该停止乘法...