leetcode 172 階乘後的零

2021-10-03 04:35:07 字數 1654 閱讀 7893

給定乙個整數 n,返回 n! 結果尾數中零的數量。

示例 1:

輸入: 3

輸出: 0

解釋: 3! = 6, 尾數中沒有零。

示例 2:

輸入: 5

輸出: 1

解釋: 5! = 120, 尾數中有 1 個零.

說明: 你演算法的時間複雜度應為 o(log n) 。

此篇文章並不是講這個題,而是總結一下學習到的乙個知識點:對於乙個正整數n,求所有小於等於n的數x的因子為factor的總數totalfactor。這句話可能不太好理解,說直白點就是,從1開始到n,對於每個數都求它的factor的個數,然後求和。

舉例說明:126,求factor為5的totalfactor。

算125的5的個數(因為126肯定是除不盡5的):tot

alfa

ctor

+=

125/

5totalfactor += 125 / 5

totalf

acto

r+=1

25/5

;算出125/5的5的個數即25即5的個數(因為25~125之間的數是肯定沒有5因子的):tot

alfa

ctor

+=

125/5/

5=

125/52

totalfactor += 125 / 5 / 5 = 125 / 5^2

totalf

acto

r+=1

25/5

/5=1

25/5

2;t ot

alfa

ctor

+=

125/53

totalfactor += 125 / 5^3

totalf

acto

r+=1

25/5

3;…直至最後125/5

k==0

,tot

alfa

ctor

+=

0125 / 5^k == 0,totalfactor += 0

125/5k

==0,

tota

lfac

tor+

=0。

總結:求正整數n,factor為factor的totalfactor:

tot

alfa

ctor

=n/f

acto

r+n/

fact

or2+

n/fa

ctor

3+..

.totalfactor = n/factor + n/factor^2 + n/factor^3 + ...

totalf

acto

r=n/

fact

or+n

/fac

tor2

+n/f

acto

r3+.

..

**如下:

public

inttrailingfactors

(int n)

階乘後的零 LeetCode 172

10進製數結尾的每乙個0都表示有乙個因數10存在,任何進製都一樣,對於乙個m進製的數,讓結尾多乙個0就等價於乘以m。10可以分解為2 5 因此只有質數2和5相乘能產生0,別的任何兩個質數相乘都不能產生0,而且2,5相乘只產生乙個0。所以,分解後的整個因數式中有多少對 2,5 結果中就有多少個0,而分...

LeetCode 172 階乘後的0

乙個數n,他的階乘n 的尾數裡面有多少0.0的出現就是2和5組成的。也就是看1 n這n個數字中,各有多少個2和5的配對。考慮到2的數字肯定比5多,所以只用考慮有多少個5即可。比如31這個數字,31沒有5的組合,但是30有,25有,20有 5有。class solution def trailingz...

leetcode 172 階乘後的零

對於乙個數的階乘,就如之前分析的,5 的因子一定是每隔 5 個數出現一次,也就是下邊的樣子。n 1 2 3 4 1 5 2 5 3 5 n 因為每隔 5 個數出現乙個 5,所以計算出現了多少個 5,我們只需要用 n 5 就可以算出來。但還沒有結束,繼續分析。1 5 1 5 5 2 5 5 3 5 5...