1. 程式人生 > >LOJ2565 SDOI2018 舊試題 莫比烏斯反演、三元環計數

LOJ2565 SDOI2018 舊試題 莫比烏斯反演、三元環計數

是否 nlog href 暴力 log 莫比烏斯反演 發現 ref 循環

傳送門


這道題的思路似乎可以給很多同時枚舉三個量的反演題目提供一個很好的啟發……

首先有結論:\(d(ijk) = \sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{z|k}[x \perp y][y \perp z][x \perp z]\)。正確性證明考慮:對於質數\(p\),設\(i,j,k\)中質因子\(p\)的個數為\(a,b,c\)。在\(x,y,z\)中至多只能有\(1\)個數含質因子\(p\),有以下情況:\(x,y,z\)中都沒有\(p\),有1種;\(x\)中有\(p\),有\(a\)種;\(y\)中有\(p\),有\(b\)種;\(z\)

中有\(p\),有\(c\)種。那麽在\(\sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{z|k}[x \perp y][y \perp z][x \perp z]\)\(p\)的貢獻為\(a+b+c+1\),而在\(d(ijk)\)\(p\)的貢獻也是\(a+b+c+1\),所以兩者等價。

\(A \leq B \leq C\)\(\frac{x}{y}\)默認下取整。用上述結論化簡式子:

\(\begin{align*} \sum\limits_{i=1}^A \sum\limits_{j=1}^B \sum\limits_{k=1}^C d(ijk) & = \sum\limits_{i=1}^A \sum\limits_{j=1}^B \sum\limits_{k=1}^C \sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{z|k}[x \perp y][y \perp z][x \perp z] \\ & = \sum\limits_{x = 1}^C \sum\limits_{y=1}^C \sum\limits_{z=1}^C[x \perp y][y \perp z][x \perp z] \frac{A}{x} \frac{B}{y} \frac{C}{z} \\ &= \sum\limits_{x = 1}^C \frac{A}{x} \sum\limits_{y=1}^C \frac{B}{y} \sum\limits_{z=1}^C \frac{C}{z} \sum\limits_{p | x , p | y} \mu(p) \sum\limits_{q | x , q | z} \mu(q) \sum\limits_{r | y , r | z} \mu(r) \\ &= \sum\limits_{p=1}^C \mu(p) \sum\limits_{q=1}^C \mu(q) \sum\limits_{r=1}^C \mu(r) \sum\limits_{p | x , q | x}\frac{A}{x} \sum\limits_{p | y , r | y} \frac{B}{y} \sum\limits_{q | z , r | z} \frac{C}{z} \end{align*}\)

\(\sum\limits_{p | x , q | x}\frac{A}{x} = \sum\limits_{lcm(p,q) | x}\frac{A}{x}\),這個可以枚舉倍數\(O(nlogn)\)地預處理。所以我們現在需要一種快速的方法枚舉\(pqr\)三個量。

不難發現一對\(p,q\)滿足條件當且僅當\(\mu(p) \neq 0 , \mu(q) \neq 0 , lcm(p,q) \leq C\)。寫一個\((10^5)^2\)的暴力發現好像只有……\(760741\)對滿足條件!

那麽實際上有用的\(p,q\)不多。不妨構出一個圖,對於滿足\(\mu(p) \neq 0 , \mu(q) \neq 0 , lcm(p,q) \leq C\)

\(p\)\(q\)連邊\((p,q)\),權值為\(lcm(p,q)\),那麽在上述的枚舉中\(p \neq q \neq r\)的三元組\((p,q,r)\)在圖上對應一個三元環,並且能夠輕松地通過這個三元環三條邊的權值得到這個三元組的貢獻。我們直接三元環計數統計這樣的三元環的答案,因為圖顯然不是構造的所以跑不滿根號。

因為打表是不現實的,所以我們還要解決如何快速算出滿足\(\mu(p) \neq 0 , \mu(q) \neq 0 , lcm(p,q) \leq C\)\(p\)\(q\)。考慮枚舉\(gcd(p,q)\),然後枚舉\(p\)\(q\),當\(lcm(p,q) > C\)時退出,枚舉的時候check一下\(\mu(p) , \mu(q) , gcd(p,q)\)是否滿足條件。這樣的復雜度是\(O(Clog^2C)\)的。

上面三元環計算出了\(p \neq q \neq r\)的貢獻,\(p=q=r\)的貢獻直接枚舉一遍,\(p = q \neq r\)的情況在枚舉圖上的邊的時候可以一並計算。然後這道題就做完了。

據說這道題很卡常,所以註意一些細節:1、這道題中間變量用long long存的下,可以避免大量取模;2、存邊用vector而不是前向星可以通過內存連續訪問爭取到更優秀的常數;3、必要的時候可以循環展開。

代碼

LOJ2565 SDOI2018 舊試題 莫比烏斯反演、三元環計數