【转载】数论学习笔记(Blog of tyqtyq)
from a famous oier \(\texttt{tyqtyq}\)请点链接tyqtyq~! - 博客园 (cnblogs.com)
数论分块
\(\sum_{i=1}^{n} \lfloor\frac{n}{i}\rfloor \times f(i)\)
在\(O(n)\)筛出\(f(i)\)的前缀和后, 可以在单次\(O(\sqrt n)\)的复杂度下求出上式.
考虑\(\lfloor\frac{n}{i}\rfloor\)的取值个数. 在 \(i \leq \sqrt n\)时最多只有\(\sqrt n\)个\(i\), 故最多只有\(\sqrt n\)个取值.
在\(i>\sqrt n\)时, \(\lfloor\frac{n}{i}\rfloor \leq \frac{n}{i}<\sqrt n\), 故最多只有\(\sqrt n-1\)个取值.
因此我们可以考虑枚举\(\lfloor\frac{n}{i}\rfloor\)的取值. 因为函数不下降我们考虑枚举每个取值区间的左右端点. 不妨设某个取值区间的左端点是\(l\), 考虑求出该取值区间的右端点\(r\). 不妨设\(\lfloor\frac{n}{l}\rfloor = k\), 我断言\(r = \lfloor\frac{n}{k}\rfloor\). 因为\(kr \leq n \leq (k+1)r\), 所以必然在取值区间内. 又\(k(r+1) \geq n\)所以\(r+1\)不在取值区间内. 故右端点为\(r\).
莫比乌斯反演
两个性质
\(\sum\limits_{d|n} \mu(d) = [n=1]\) (经常用来展开\([f(n)=1]\))
\(\sum\limits_{d|n} \varphi(d) = n\)
对于 \(\gcd\) 的反演(出现\(\gcd\)的时候枚举\(\gcd\)也是一种时常奏效的方法):
对于\(\sigma_0\)的反演
对于\(\varphi\)的反演
反演本质
狄利克雷卷积 与 杜教筛
下文中的\(A\),\(B\),\(C\)均指某积性函数.
狄利克雷卷积
定义:
\(A*B(n) = \sum\limits_{d|n} A(d)B(\frac{n}{d})\)
几个常用的卷积
\(\varphi *I = id\)
\(\mu * I = \epsilon\)
\(\epsilon * A = A\)
\(A*(B*C) = (A*B)*C\)
\(A*B = B*A\)
\((A+B)*C = A*C+B*C\)
杜教筛的原理
设\(A = B*C\), 于是有
不妨设\(S(n) = \sum\limits_{i=1}^{n} B(i)\)所以\(C(1)S(n) = \sum\limits_{i=1}^{n}A(i) - \sum\limits_{d=2}^{n}C(d)S(\lfloor\frac{n}{d}\rfloor)\)
若选择一个较好的\(C\)和\(A\), 则可以通过数论分块在\(T(n) = O(\frac{n}{\sqrt m}+m)\)的时间复杂度内完成此问题, 其中\(m\)是一个常数, 代表我们需要先使用线性筛筛出\(S(1\sim m)\), 可以发现在\(m = n^{\frac23}\)时算法复杂度为\(O(n^\frac23)\)为最优.