這兒只是一個簡單說明/概括/總結。
原理見這:
https://www.cnblogs.com/cjyyb/p/9185093.html
https://www.cnblogs.com/zhoushuyu/p/9187319.html
首先計算$$g(n,j)=\sum_if(i),\quad i是質數\ 或\ i的最小質因子嚴格大於P_j\g(n,j)=\begin{cases}g(n,j-1)&P_j^2\gt n\ g(n,j-1)-f(P_j)\left[g(\frac{n}{P_j},j-1)-\sum_{i=1}^{j-1}f(P_i)\right]&P_j^2\le n\end{cases}$$
類似埃氏篩法,\(P(n,j)\)就是篩\(j\)次后剩下的數的\(f\)和,再加上所有質數\(p\)的\(f(p)\)之和。
\(P_j^2>n\)時,這一次篩不會篩掉任何數,所以就是\(g(n,j-1)\)。
\(P_j^2\leq n\)時,考慮第\(j\)次篩掉了哪些數,也就是最小質因子是\(P_j\)的那些數。因為是積性函數,所以我們直接提出一個\(P_j\)(來保證它含\(P_j\))。
要被篩掉的數在除掉一個\(P_j\)后的最小質因子一定仍大於等於\(P_j\)(否則在之前就被篩掉了),這符合\(g(\frac{n}{P_j},j-1)\)的定義。所以減掉一個\(f(P_j)g(\frac{n}{P_j},j-1)\)。但是\(g(\frac{n}{P_j},j-1)\)還包含所有質數的\(f(p)\)之和,所以再加上\(\sum_{i=1}^{j-1}f(P_i)\)。
那初值呢?先把所有合數的\(f\)的計算方式看做和質數一樣,以便對所有數的\(f\)值快速求個和,用它作為\(g(n,0)\)(注意這里不考慮\(1\))。這樣雖然合數的\(f\)值是假的,但是\(g(n,|P|)\)還是能正確的表示所有質數\(p\)的\(f(p)\)之和。
現在考慮算上合數的\(f\)值求和。令$$S(n,j)=\sum_if(i),\quad i是質數\ 或\ i的最小質因子大於等於P_j$$
我們把\(S(n,j)\)分兩部分計算,一是所有質數的貢獻,二是所有合數的貢獻。對於\(f(1)\)最后單獨算下。
那么所有質數的貢獻可以用\(g\)表示,也就是\(g(n,j)-\sum_{i=1}^{j-1}f(P_i)\)(因為最小質因子要大於等於\(P_j\),所以把那些減掉)。
對於合數,枚舉這個合數的最小質因子及其次數,用\(f\)是積性函數的性質直接算:$$S(n,j)=g(n,j)-\sum_{i=1}^{j-1}f(P_i)+\sum_{k=j}^{P_k^2\leq n}\sum_{e=1}^{P_k^{e+1}\leq n}\left[f(P_k^e)\times S(\frac{n}{P_k^e},k+1)+f(P_k^{e+1})\right]$$
\(f(P_k^{e+1})\)是\(S\)沒有考慮的那部分(就是\(P_k^{e+1}\),質數的若干次冪這樣的合數,而\(S(..,k+1)\)就把這些數忽略掉了)。
答案就是\(S(n,1)+f(1)\)。
流程:
-
把所有合數看做質數,求一遍和,得到初值\(g(n,0)\)。同時預處理一個\(f(P_i)\)的前綴和。
-
用$$g(n,j)=\begin{cases}g(n,j-1)&P_j^2\gt n\ g(n,j-1)-f(P_j)\left[g(\frac{n}{P_j},j-1)-\sum_{i=1}^{j-1}f(P_i)\right]&P_j^2\le n\end{cases}$$
計算\(g(x,|P|)\)(把第二維滾動掉)。 -
用$$S(n,j)=g(n,j)-\sum_{i=1}^{j-1}f(P_i)+\sum_{k=j}^{P_k^2\leq n}\sum_{e=1}^{P_k^{e+1}\leq n}\left[f(P_k^e)\times S(\frac{n}{P_k^e},k+1)+f(P_k^{e+1})\right]$$
計算\(S(n,1)+f(1)\)。
計算\(S,g\)的復雜度都是\(O(\frac{n^{\frac34}}{\log n})\)。
對於其它積性函數,同\(g\)一樣計算。
實現上,篩\(sqrt(n)\)內的質數這一步往往可以省略,見這里。
例題:
LOJ6235 區間素數個數
BZOJ3944 Sum
LOJ6053 簡單的函數
以后要做的題:
https://cmxrynp.github.io/2018/12/03/Min-25篩學習筆記/
https://blog.csdn.net/koishi_514/article/details/79485534
https://blog.csdn.net/HOWARLI/article/details/80339931