求N!末尾所得數字0的個數

2022-09-15 09:36:12 字數 865 閱讀 1787

題目:給定乙個整數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...