Codeforces 300E(数学)
生活随笔
收集整理的這篇文章主要介紹了
Codeforces 300E(数学)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:給定k個數字,求最小的正整數n,使得“n的階乘”是“這k個數字的階乘的積”的倍數。1<=k<=1e6,數字ai滿足1<=ai<=1e7
分析:如果我們能對著k個數字的階乘的結果分解質因數,那么就可以根據每個質因數的指數來二分最后的答案
問題的關鍵就是如何分解a1!a2!a3!a4!.....
先可以預處理出1..MAX每個數在式子中出現了多少次(對于ai,也就是1~ai中間所有數字出現次數+1),這可以用差分做
我們知道了cnt[1..MAX]后,接下來就是考慮分解了
我們從大到小枚舉每個數字x
如果x是合數,我們可以把x分解成一個質因數和另外一個數的乘積,于是我們可以把x位置的次數加到那兩個位置上。并且x位置的次數設為0
如果x是素數,則跳過
那么最后,每個素數對應的出現總次數就算出來了
這樣是O(n)的
對于一個數字x的質因數,我們可以在歐拉篩的時候記一下,可以記一下最小的質因數
歐拉篩也是O(n)的
轉載于:https://www.cnblogs.com/wmrv587/p/6549842.html
總結
以上是生活随笔為你收集整理的Codeforces 300E(数学)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不孕不育可以转诊
- 下一篇: springboot-6-整合jdbc