1. 程式人生 > >$Min\_25$篩學習筆記

$Min\_25$篩學習筆記

這種神仙東西不寫點東西一下就忘了QAQ

\(Min\_25\)篩可以幹嘛?下文中未特殊說明\(P\)均指質數集合,\(p_i\)\(p\)指某個具體質數。

求一類積性函式\(f(x)\)的字首和,需要滿足\(f(p)\)可以寫成多項式的形式,或者操作一下可以寫成多項式(如例題),且\(f(p^k)\)能快速求出。

講真學這個東西比我什麼都不會的時候學\(FFT\)都累。

Round 1

先求質數的貢獻。我們要求

\[\sum_{i=1}^x[i是質數]f(i)\]

我們可以設

\[g(n,j)=\sum_{i=1}^{n}[i \in P \ or\ \min(p)>P_j]f(i)\]

注意到當\(p_j^2>x\)時,\(g(n,j)=g(n,j-1)\)因為沒有新的貢獻了,所以我們只要篩到\(\sqrt n\)的質數就可以了,這也是降低複雜度的關鍵。

我們還注意到\(g(n,|P|)=\sum_{i=1}^x[i是質數]f(i)\)\(|P|\)\(\sqrt n\)內的質數集合大小。

關於\(g(n,i)\)的轉移,我們有:

\[g(n,j)=g(n,j-1)-f(P_j)[g(\frac{n}{P_j},j-1)-\sum_{i=1}^{j-1}f(P_i)],P_j^2\le n\]

意思大概就是減掉所有最小質因子為\(p_j\)的貢獻,但由於\(g(\frac n{p_j},j-1)\)

裡包含了質數,而\(<p_j\)的質數是不能算的,所以要減掉。