問題:n的階乘(n!)中的末尾有多少個0?
例如:
n = 5,n! = 120.末尾有1個0.
n = 10,n! = 3628800.末尾有2個0。
分析:看到這個問題,有人可能第一反應是先求出n!,然後再根據求出的結果,最後得出n!的末尾有多少個0。但是轉念一想,會不會溢位。
其實,從」哪些數相乘可以得到10」這個角度,問題就變得比較的簡單了。
首先考慮,如果n的階乘為k和10的m次方的乘積,那麼n!末尾就有m個0。
n的階乘可以分解為: 2的x次方,3的y次方,5的次z方…..的一系列質因子相乘。由於10 = 2 * 5,所以m只能和x和z有關,每一對2和5相乘就可以得到乙個10,於是m = min(x,z),因為是階乘,所以2的次方x大於5的次方z,因為被2整除的頻率比被5整除的頻率高的多。所以可以把公式簡化為m=z.
由上面的分析可以看出,只要計算出z的值,就可以得到n!末尾0的個數
方法一
要計算z,最直接的方法就是求出n的階乘的所有因式(1,2,3,…,n)分解中5的指數。然後求和
int fun1(int n)
}return num;
}
方法二:
z = n/5 + n /(5*5) + n/(5*5*5)…..直到n/(5的k次方)等於0
公式中 n/5表示不大於n的數中能被5整除的數貢獻乙個5,n/(5*5)表示不大於n的數中能被25整除的數再貢獻乙個5…….
int fun2(int n)
return num;
}
N 末尾有多少個0
問題分析 對於n 想要知道其末尾有多少個0,則可以分解為問題能被多少個10整除,繼續分解,被10整除,則必能同時被2和5整除。則對n!進行質因數分解,n 2 x 3 y 5 z 可得n 2 p 5 q r,1z 一 則m 1 2 k,存在乙個k使得5 k n 二 則m n 5 n 5 2 n 5 k...
N 的末尾有多少個0?
n的階乘末尾有多少0呢?首先,得思考一下0到底是由哪些數貢獻的,顯而易見,乙個2和5能貢獻乙個0,然後我們只需要計算2和5的因子的個數即可,最後取最小值就是0的個數!n的階乘是從1到n的乘積,因子2的個數明顯多於5,只需要計算因子5的數量即可。1 n中5的倍數有n 5個,5 的倍數有n 5 個,5 ...
求N!末尾有多少個0
思考 該題實際上是求 2 5 因子對的個數。對於任意乙個階乘,5因子的個數總是小於2因子的個數,僅需考慮n 中5因子的個數 方法 1 將該數用 5 除,得到的商取整數。2 然後再用所得商當被除數除以 5,得到的商取整數。3 持續做到商等於 0 為止。4 過程中的商加總即為階乘的尾數 0 的個數。例 ...