N的阶乘末尾有多少个0
生活随笔
收集整理的這篇文章主要介紹了
N的阶乘末尾有多少个0
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
例如:N = 5,N! = 120.末尾有1個0.
分析:想到這個問題,有人可能第一反應(yīng)就是現(xiàn)求出N!,然后再根據(jù)求出的結(jié)果,最后得出N!的末尾有多少個0。但是轉(zhuǎn)念一想,會不會溢出,等等。
其實,從"那些數(shù)相乘可以得到10"這個角度,問題就變得比較的簡單了。 首先考慮,如果N的階乘為K和10的M次方的乘積,那么N!末尾就有M的0。如果將N的階乘分解后,那么 N的階乘可以分解為: 2的X次方,3的Y次方,4的5次Z方,.....的成績。由于10 = 2 * 5,所以M只能和X和Z有關(guān),每一對2和5相乘就可以得到一個10,于是M = MIN(X,Z),不難看出X大于Z,因為被2整除的頻率比被5整除的頻率高的多。所以可以把公式簡化為M=Z. 由上面的分析可以看出,只要計算處Z的值,就可以得到N!末尾0的個數(shù)
方法一 要計算Z,最直接的方法就是求出N的階乘的所有因式(1,2,3,...,N)分解中5的指數(shù)。然后求和
方法二:
Z = N/5 + N /(5*5) + N/(5*5*5).....知道N/(5的K次方)等于0
公式中 N/5表示不大于N的數(shù)中能被5整除的數(shù)貢獻(xiàn)一個5,N/(5*5)表示不大于N的數(shù)中能被25整除的數(shù)再共享一個5.......
其實,從"那些數(shù)相乘可以得到10"這個角度,問題就變得比較的簡單了。 首先考慮,如果N的階乘為K和10的M次方的乘積,那么N!末尾就有M的0。如果將N的階乘分解后,那么 N的階乘可以分解為: 2的X次方,3的Y次方,4的5次Z方,.....的成績。由于10 = 2 * 5,所以M只能和X和Z有關(guān),每一對2和5相乘就可以得到一個10,于是M = MIN(X,Z),不難看出X大于Z,因為被2整除的頻率比被5整除的頻率高的多。所以可以把公式簡化為M=Z. 由上面的分析可以看出,只要計算處Z的值,就可以得到N!末尾0的個數(shù)
方法一 要計算Z,最直接的方法就是求出N的階乘的所有因式(1,2,3,...,N)分解中5的指數(shù)。然后求和
| int?fun1(int?n) |
方法二:
Z = N/5 + N /(5*5) + N/(5*5*5).....知道N/(5的K次方)等于0
公式中 N/5表示不大于N的數(shù)中能被5整除的數(shù)貢獻(xiàn)一個5,N/(5*5)表示不大于N的數(shù)中能被25整除的數(shù)再共享一個5.......
| int?fun2(int?n) |
總結(jié)
以上是生活随笔為你收集整理的N的阶乘末尾有多少个0的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java描述设计模式(18):享元模式
- 下一篇: Charm Bracelet(0-1)