杜教篩

ChElsYqwq發表於2024-04-02

這是一種對於一個數論函式 \(f(n)\),計算 \(S(n)=\sum_{i=1}^n f(i)\) 的快速方法。

構造兩個積性函式 \(h,g\) 滿足 \(h=g*f\),根據卷積的定義,有 \(h(i)=\sum_{d|i}g(d)f(\frac{i}{d})\),對 \(h\) 求和,有:

\[\sum_{i=1}^n h(i)=\sum_{i=1}^n\sum_{d|i}g(d)f(\frac{i}{d}) \]

\[=\sum_{d=1}^n g(d)\sum_{d|i}^n f(\frac{i}{d})=\sum_{d=1}^ng(d)\sum_{i=1}^{n/d}f(i)=\sum_{d=1}^n g(d)S(⌊\frac{n}{d}⌋) \]

然後我們得到

\[\sum_{i=1}^nh(i)=g(1)S(n)+\sum_{d=2}^n g(d)S(⌊\frac{n}{d}⌋) \]

\[g(1)S(n)=\sum_{i=1}^nh(i)-\sum_{d=2}^n g(d)S(⌊\frac{n}{d}⌋) \]

\[g(1)S(n)=\sum_{i=1}^nh(i)-\sum_{i=2}^n g(i)S(⌊\frac{n}{i}⌋) \]

記憶化之後複雜度是 \(O(n^{\frac{3}{4}})\) 的捏。

如果預處理 \(S(1,...,k)\),那麼複雜度 \(O(k)+O(\frac{n}{\sqrt k})\) 的捏。

\(k=n^{\frac{2}{3}}\) 時候有最小值 \(O(n^{\frac{2}{3}})\) 的捏。


尤拉函式怎麼獨角骰?尤拉函式怎麼獨角骰?尤拉函式怎麼獨角骰?

首先有一個 \(n=\sum_{d|n}\phi(d)\),然後套用上面的柿子 \(g(1)S(n)=\sum_{i=1}^nh(i)-\sum_{i=2}^n g(i)S(⌊\frac{n}{i}⌋)\) 可得:

\[S(n)=\frac{n(n+1)}{2}-\sum_{i=2}^n S(⌊\frac{n}{i}⌋) \]


梅比烏斯怎麼獨角曬?梅比烏斯怎麼獨角曬?梅比烏斯怎麼獨角曬?

首先有一個 \([n=1]=\sum_{d|n}\mu(d)\),還是套用上面的柿子可得:

\[S(n)=1-\sum_{i=2}^nS(⌊\frac{n}{i}⌋) \]

相關文章