求N!末尾有多少個0

2021-06-18 18:41:27 字數 1130 閱讀 2677

/*思考: 該題實際上是求(2 5)因子對的個數。對於任意乙個階乘,5因子的個數總是小於2因子的個數,僅需考慮n!中5因子的個數

方法:  

(1) 將該數用 5 除, 得到的商取整數。  

(2) 然後再用所得商當被除數除以 5,得到的商取整數。  

(3) 持續做到商等於 0 為止。  

(4) 過程中的商加總即為階乘的尾數 0 的個數。  

例: 1234! 的尾數 0 的個數計算如下: **:

1234/5 = 246 

246/5 = 49 

49/5 = 9 

9/5 = 1 

1/5 = 0 

------ ---------- 305

原理:行(1)得到的是1~~~n中因子含5的數的個數

行(2)得到的是1~~~n中因子含25的數的個數..

行(n)得到的是1~~~n中因子含5^n的數的個數

將這些數進行累計就得到了5因子的個數,也就是末尾0的個數。

將n!進行質因數分解,n! = 2^x + 3^y + 5^z + ... ,那麼一定有x >= z 因為n! = 1 * 2 * ... * n

在這個乘法序列中,每出現乙個5,前面一定有乙個2與之對應,況且值為2的冪的數一定多餘值為5的冪的數。

這樣只要求出z的值即可,因為乙個5肯定會在末尾貢獻乙個,因為任意乙個偶數與5相乘都會在末尾產生乙個0

所以只要求出在這個序列中有多少數是5的倍數(貢獻乙個5),有多少數是25的倍數(貢獻2個5),有多少125的倍數。。。

所以就有了上面的程式,注意某個數是25的倍數,那麼也一定是5的倍數。所以求5的倍數時就計算了其中乙個5,求25的倍數時計算了的另外乙個5.*/

#include

int main()

return count; }

void main() {

cout <

是5的倍數的數有: 1024 / 5 = 204個

是25的倍數的數有:1024 / 25 = 40個

是125的倍數的數有:1024 / 125 = 8個

是625的倍數的數有:1024 / 625 = 1個

所以1024! 中總共有204+40+8+1=253個因子5。即1024!後有253個0

2012 09 03 求N 末尾有多少個0

n 末尾有都少個0,首先追本溯源0是怎麼得來的,所有的0都是由質因數2和5相乘得到的。那麼對所有的n 在內的n個數進行質因數分解,只需要計算2和5的個數,取其中較小的乙個,即能得到n 有多少個0。1 要對n個數進行質因數分解,採取最暴力的方式也能解決,當n很大的情況下就不再適用了,那麼有沒有一種方法...

求N 中末尾有多少個0

分析 對n進行質因數分解 n 2 x 3 y 5 z.由於10 2 5,所以末尾0的個數只和x與z有關,每一對2和5相乘可以得到乙個10,於是末尾0的個數 min x,z 在實際中x是遠遠大於z的,所以我們只要求出z的值即可。根據公式 z n 5 n 5 2 n 5 3 n 5 k 這表明,5的倍數...

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...