總結
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的時候就會引起溢位,所以雖然這是乙個正確的方法,但在實際中卻不能使用。這時就需要...