杜教筛小记

杜教筛小记

对于一个函数\(F(n)\),要在较低时间内求前缀和\(S_F(n)=\sum_{i=1}^nF(i)\)

假设我们能找到一个函数\(G(n)\)使得\(G(n),S_{F \oplus G}(n)\)能在较短时间内算出

其中\(\oplus\)表示狄利克雷卷积,\((F\oplus G)(n)=\sum_{d|n}F(d)G(\frac{n}{d})\)

那么就有

\(\displaystyle S_{F\oplus G}(n)=\sum_1^n G(i)S_F(\lfloor\frac{n}{i}\rfloor)\)

\(\displaystyle G(1)F(n)=S_{F\oplus G}(n)-\sum_2^nG(i)S_F(\lfloor\frac{n}{i}\rfloor)\)

这个\(\lfloor\frac{n}{i}\rfloor\)的个数是\(O(\sqrt n)\)的,数论分段求解

由于每次从\(2\)开始枚举,每次子问题大小至少减半

(然而并没有分析复杂度)

\(n\)较小时可以直接预处理出来前\(m\)个(\(m\)为以常数)

不要存状态\(\text{dp}\),直接递归求解用\(\text{map}\)维护记录即可

ps:实际上对于一个固定的\(n\),每次计算\(x\)的答案时,可以根据当前的\(\lfloor \cfrac{n}{x}\rfloor\)为状态编号,去掉了\(\text{map}\)

\(m=n^{\frac{2}{3}}\)时,复杂度最优为\(O(n^{\frac{2}{3}})\)


例子1:

对于\(F(n)=\mu(n)\),求\(S_\mu(n)\)

由于\(\sum_{d|n}\mu(d)=[n=1]\)

那么就知道可以构造\(G(n)=1\)

\((F\oplus G)(n)=[n=1]\)

\(S_{F\oplus G}(n)=1\)

\(\displaystyle S_F(n)=S_{F\oplus G}(n)-\sum_2^nS_F(\lfloor\frac{n}{i}\rfloor)\)



例子1.5

\(F(n)=\mu(n)n^k\),求\(S_F(n)\)

\(G(n)=n^k\)

\(\displaystyle (F\oplus G)(n)=\sum _{d|n} \mu(d)d^k (\frac{n}{d})^k=n^k\sum_{d|n} \mu(d)=[n=1]\cdot n^k\)

\(\displaystyle S_F(n)=1-\sum_{i=2}^n i^kS_F(\lfloor \frac{n}{i}\rfloor )\)

只要通过一些手段得到\(i^k\)前缀和即可



例子2:

对于任何\(F(n)=\sum_{d|n}\mu(d)H(\frac{n}{d})\),其中\(H(n)\)前缀和可以求

类似上面的,构造\(G(n)=1\)

\((F\oplus G)(n)=\sum_{d|n}H(d)\sum_{k|\frac{n}{d}}\mu(k)=H(n)\)

\(\displaystyle S_F(n)=S_{H}(n)-\sum_2^nS_F(\lfloor\frac{n}{i}\rfloor)\)

\[\ \]

例子3+3.5:

\(F(n)=\varphi(n)\cdot n^k\),求\(S_F(n)\)

性质:\(\displaystyle \sum_{d|n}\varphi(d)=n\)

原理简要证明:满足\(\gcd(i,n)=\frac{n}{d}\)\(i\)共有\(\varphi(d)\)个,则累和就是枚举了所有\(\gcd(i,n)\)进行统计

所以构造\(G(n)=n^{k}\)

\(\displaystyle (F\oplus G)(n)=\sum_{d|n}F(d)G(\frac{n}{d})=\sum_{d|n} \varphi(d)d^k(\frac{n}{d})^{k}=\sum_{d|n} \varphi(d) n^{k}=n^{k+1}\)

同样的只需要求出

\(\displaystyle S_{F\oplus G}(n)=\sum_{i=1}^n i^{k+1}\)

\(\displaystyle S_G(n)=\sum_{i=1}^n i^k\)

posted @ 2020-06-11 13:54  chasedeath  阅读(223)  评论(0编辑  收藏  举报