Min_25 Sieve 學習筆記
阿新 • • 發佈:2022-04-04
這個東西不是人想的。
解決問題:積性函式字首和。
適用條件:可以快速計算 \(f(p)\) 的字首和,\(f(p^k)\) 可以被表示成若干完全積性函式的線性組合(指對應項可以快速組合出來)。
時空複雜度:就當是 \(O(\dfrac{n^\frac{3}{4}}{\log n}+n^{1-\epsilon})-O(\sqrt n)\)。
以下預設 \(f(p)\) 為關於 \(p\) 的單項式,\(p_i\) 為第 \(i\) 個質數。
求質數處的字首和
我們需要對於每個能被表示成 $\lfloor \dfrac{n}{x}\rfloor $ 的數,求所有在其前的質數 \(p\) 的 \(\sum f(p)\)
這就體現出完全積性的重要性。求和號部分可以線上篩質數的時候預處理出來。第一維顯然可以滾動陣列優化掉,而對於第二維,$\lfloor \dfrac{n}{x}\rfloor $ 只有 \(O(\sqrt n)\)
我們把篩去所有最小質因子後的得到的 dp 陣列記為 \(g\)。
求原函式字首和
設 \(s_{n,i}\) 表示 \([1,n]\) 最小質因子大於 \(p_i\) 的所有數的 \(f\) 之和。列舉最小質因子及其次數,得到轉移
\[s_{n,i} = g_n - \sum_{j\le i}f(p_j) + \sum\limits_{p_k^t \le n} f(p_k^t)\bigg{(}s_{n/p_k^t},k+1)+[t\gt 1]\bigg{)} \]根據神奇的複雜度分析,可以直接遞迴下去做。
最後加上 \(1\) 的貢獻。