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