【转载】数论学习笔记(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\)也是一种时常奏效的方法):

\[\begin{align}f(n) &= \sum\limits_{i \leq a} \sum\limits_{j \leq b} [\gcd(i, j)=n]\\g(n) &= \sum\limits_{n|d} f(d)\\&= \sum\limits_{i \leq a} \sum\limits_{j \leq b} [n|\gcd(i, j)] \\&= \lfloor\frac{a}{n}\rfloor \lfloor\frac{b}{n}\rfloor\\\sum\limits_{n|d} \mu(\frac{d}{n}) g(d) &= \sum\limits_{n|d} \mu(\frac{d}{n})\sum\limits_{d|x} f(x)\\&= \sum\limits_{n|x} f(x) \sum\limits_{\frac{d}{n}|\frac{x}{n}} \mu(\frac{d}{n})\\&= \sum\limits_{n|x} f(x) [x=n] = f(n)\end{align} \]

对于\(\sigma_0\)的反演

\[\begin{align}\sigma_0(xy) &= \sum\limits_{a|x}\sum\limits_{b|y} [\gcd(a, b)=1]\\&=\sum\limits_{a|x}\sum\limits_{b|y}\sum\limits_{d|\gcd(a, b)}\mu(d)\end{align} \]

对于\(\varphi\)的反演

\[\begin{align}\varphi(ij)&=\frac{\varphi(i)\varphi(j)\gcd(i, j)}{\varphi(\gcd(i,j))}\\&=\sum\limits_{d}\varphi(i)\varphi(j)\frac{d}{\varphi(d)} [d = \gcd(i, j)]\\\end{align} \]

反演本质

\[\begin{align}g(n) &= \sum\limits_{d|n} f(d)\\ f(n) &= \sum\limits_{d|n} [\frac{n}{d}=1]f(d) \\ &= \sum\limits_{d|n} \sum\limits_{id|n} \mu(i)f(d) \\ &=\sum\limits_{i|n} \mu(i) \sum\limits_{d|\frac{n}{i}} f(d) \\ &=\sum\limits_{d|n} \mu(d) f(\frac{n}{d}) = \sum\limits_{d|n} \mu(\frac{n}{d}) f(d) \end{align} \]

狄利克雷卷积 与 杜教筛

下文中的\(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\), 于是有

\[\begin{align}\sum\limits_{i=1}^{n} A(i) &= \sum\limits_{i=1}^{n} \sum\limits_{d|i} C(d) B(\frac{i}{d})\\&=\sum\limits_{d=1}^{n}C(d)\sum\limits_{k=1}^{\lfloor\frac{n}{d}\rfloor}B(k)\end{align} \]

不妨设\(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)\)为最优.

posted @ 2020-11-30 19:12  Vanilla_chan  阅读(143)  评论(0编辑  收藏  举报