題目:給定乙個整數n ,那麼n 的階乘n !末尾有多少個0呢?
例如:n = 10,n! = 3628800,所以n!末尾就有2個零。
分析:如果直接先算出n!階乘,很容易導致記憶體溢位。顯然,直接算出來是不行的。所以,我們可以換乙個角度來分析這個問題。我們知道
n! = 1*2*3*4*......*n,所以,我們可以對n!進行分解質因數。即n! = 2^x * 3^y * 5 ^z........可以看到2和5相乘,必然會產生乙個零。那麼問題就轉化為2^x * 5^z可以產生多少個零就可以了。即求出min(x,z)。顯然x大於z(能被2整除的肯定比能被5整除的多),故我們只需要求出1...n能夠分解出多少個5就行了。
**:
#python 版
defcount_zero_number(value):
ifnot
isinstance(value,int):
raise typeerror("
引數必須為整型")
res =0
if value <=0:
return
0 i = 1
while i <=value:
j = i #
儲存當前i的值
while j % 5 == 0: #
判斷當前值是否含有重複質數
count += 1j = j // 5 #
更新j的值
i += 1
return count
# cpp版int count_zero_number(int
value)
}return
ret ;
}
求1 2 3 N所得數末尾有多少個0
n 1 n 2 31 所以說,暴力的方法就別想了,這很明顯就是個數學問題,要我們去發現數學規律。要出現0,就需要有2和5,當然10也可以,不過10肯定也能因式分解為2和5,所以也就可以看做2和5。我們的最終目的就是尋找這個1 n這些數中能找到多少對2和5,有多少對2和5就有多少個0。在0 n的數中,...
求n的階層末尾0的個數
統計n的階層的末尾0的個數 思路 1 設 n!k 10 m,且k不能被10整除,那麼n!末尾有 m個0 2 再考慮對n!進行質因數分解,n!2 x 3 y 5 z 因為 10 2 5,所以 m 只跟 x 和 z 有關,每一對2和5得到乙個10 於是m min x,z 不難看出x顯然大於z,因為能被2...
演算法 階乘 n 求 末尾 0 的個數
最近在網上看到乙個這樣的演算法.就寫了出來.n 末尾有多少個 0 取決於從 1 到 n 的各個數的因子中 2 和 5 的個數。又因為 2 的個數遠遠多於 5 的個數,所以只要求出這當中 5 的個數即可。不斷地用 n 除以 5,直到結果為 0,將中間的結果都加起來,即可得到因子 5 的個數。例如,10...