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