程式設計之美 set 1 不要被階乘嚇倒

2022-10-11 11:24:09 字數 456 閱讀 1268

總結

1. 使用加法

解決指數問題時, 可用揹包問題的變形

2. 題目用到的公式和求解 1~n 中 1 出現的次數的公式類似

題目1. 給定乙個整數 n, 那麼 n 的階乘 n! 末尾有多少個 0 呢

2. 求解 n! 的二進位制表示中最低位 1 的位置

思路1. 第一道題相當於求解 n! 分別是 2^a 和 5 ^b, 第二道題是 2^a

2. 公式: z = [n/5] + [n/5^2] +... [n/5] 表示不大於 n 的數中 5 的倍數貢獻乙個 5, [n/5^2]表示不大於 n 的數中, 5^2 再貢獻乙個5

2. 但第一題有乙個可以優化的地方, 因為 b < a, 所以只要關注 5^b 即可

**

int ret = 0;

while(n)

int ret = 0;

while(n)

程式設計之美 不要被階乘嚇倒

問題1描述 給定整數n,n求n!末尾有幾個0。例如n 10,n!3628800,n!末尾有兩個0 分析 一 將n!分解質因數,n!2 x 3 y 5 z 由於10 2 5,所以問題也就是求m min x,z 容易看出x大於等於z,所以也就是求z include int main printf d n...

程式設計之美2 2 不要被階乘嚇倒

對n 進行質因數分解,n 可以分解成2 x 3 y 5 z 只有2 5才會使n 的末尾產生1個0,也就是說n 的質因數分解中有多少個2,5對末尾就有多少個0,而n 的質因數中5的個數要少於2的 個數,也就是說2,5對的個數取決於質因中5的個數,所以問題轉化為求n 中質因數5的個數 5的個數z n 5...

程式設計之美 2 2 不要被階乘嚇倒

題目 1.給定乙個整數n,那麼n的階乘n!末尾有多少個0?2.求n 的二進位制表示中最低位1的位置。分析與解答 對於題目1 最簡單直接的方法,算出n!再看10的倍數關係。複雜度雖然不高,但致命的問題是溢位。在n不到100的時候就會引起溢位,所以雖然這是乙個正確的方法,但在實際中卻不能使用。這時就需要...