转自: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,这个方法不仅效率高,而且节省了计算资源。在实际编程中,理解和应用这种策略对于优化算法和解决问题至关重要。
)后,结果末尾包含的零的数量。这个问题涉及到数论中的因子分解和质因数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 的各个位上出现...
首先需要将不包含末尾0的部分进行乘法运算,然后根据末尾0的个数,在乘积的末尾补充相应数量的0。例如,计算320×5时,首先计算32×5得到160,由于原数末尾有一个0,所以在160后面再补上一个0,最终得到结果1600。 ...
- 第一处错误:在计算阶乘的初始条件中,`if(n==0) return 1.0;` 应该改为`if(n <= 0) return 1.0;`,以处理0和负数的情况。 - 第二处错误:循环条件应改为`while(n > 1)`,因为当`n`小于等于1时,应该停止乘法...
- **除法和取模操作:** 在计算过程中,可以使用除法和取模运算来逐步消除末尾的0,并找到最后一位非零数字。 - **优化算法:** 通过观察和归纳可以发现规律性模式,从而减少计算量。 **示例代码结构:** ```python...
2. 解题思路:本资源提供了一个解题思路,即根据输入的整数N,如果N是奇数,输出0 0;否则如果N不是4的倍数,输出N/4+1和N/2;如果N是4的倍数,输出N/4和N/2。 3. C语言实现:本资源提供了一个C语言的实现代码,...
由于10可以分解为2和5的乘积,而在任何正整数的阶乘中,因子2的数量通常比因子5的数量多(因为每两个连续的整数中至少有一个是偶数,从而至少包含一个因子2),因此计算阶乘尾随零的关键在于计算因子5的数量。...