杜教筛学习笔记

学这个之前,你得先了解 Dirichle 卷积

对于两个数论函数 \(f(n) , g(n)\) 形如 \(\sum_{d|n} f(d) g(\frac{n}{d})\) 这样的称为 Dirichle 卷积。

那么杜教筛怎么做呢?

对于一个数论函数 \(f(n)\) 我们要求 \(S(n)=\sum_{i=1}^{n} f(i)\)

我们考虑构造其与 \(S(\lfloor \frac{n}{i} \rfloor)\) 的递推式,这样就可以在 \(O(\sqrt{n})\) 的时间内求出答案。

我们随便找一个积性函数函数 \(g(n)\)

那么总有 \(\sum_{i=1}^{n} (f* g)(i) = \sum_{i=1}^{n} g(i)S(\lfloor \frac{n}{i} \rfloor)\)

扒一下别人的证明简单证明一下

\[\sum_{i=1}^{n} \sum_{d|i} g(d) f\bigg(\bigg\lfloor \frac{n}{i} \bigg\rfloor \bigg) \\ \\ =\sum_{i=1}^{n} \sum_{j=1}^{\big\lfloor \frac{n}{i} \big\rfloor} g(i)f(j) \]

这里改变了枚举顺序,考虑枚举 \(d,\frac{i}{d}\)

\[=\sum_{i=1}^{n}g(i) \sum_{j=1}^{\big\lfloor \frac{n}{i} \big\rfloor} f(j) \\ \\ =\sum_{i=1}^{n}g(i)S\bigg(\bigg\lfloor \frac{n}{i} \bigg\rfloor \bigg) \\ \]

这样的话。

\[g(1)S(n) = \sum_{i=1}^{n} (f* g)(i) - \sum_{i=2}^{n} g(i)S\bigg(\bigg\lfloor \frac{n}{i} \bigg\rfloor \bigg) \]

实际做题时,我们要构造出一个 \(g(n)\) ,使得它的前缀和好算,它和 \(f(n)\) 卷起来的函数的前缀和也是十分好算。

这样就可以迅速算出 \(g(1)S(n)\)

你谷板子题

\(\mu \ \varphi\) 都比较经典。记住就好了

对于 \(\mu\) ,我们知道 \(\mu * 1 = \epsilon \ (\epsilon (n) = [n=1] )\)
那么我们让 \(g(n)=1\)

\[g(1)S(n) = \sum_{i=1}^{n} (f* g)(i) - \sum_{i=2}^{n} g(i)S(\lfloor \frac{n}{i} \rfloor) \\ \\ \therefore S(n) = 1 - \sum_{i=2}^{n} S(\lfloor \frac{n}{i} \rfloor) \]

整除分块即可。

然后时间复杂度是 \(O(n^{\frac{3}{4}})\) 如果你预处理前 \(\frac{2}{3}\) ,后面的时间复杂度就是 \(O(n^{\frac{2}{3}})\)好吧我也不会证

\(\varphi\) 的话可以用莫反。

\[\sum_{i=1}^{n} \varphi (i) \\ \\ =\sum_{i=1}^{n} \sum_{j=1}^{i} [gcd(i,j)=1] \\ \\ =\sum_{i=1}^{n} \sum_{j=1}^{i} \sum_{d|i,d|j} \mu (d) \\ \\ =\sum_{d=1}^{n} \mu (d) \left( \lfloor \frac{n}{d} \rfloor \right) ^2 \]

当然你也可以杜教筛。

\[\because \varphi * 1 = ID \\ \\ ID(n) = n \\ \\ S(n) = \frac{n(n-1)}{2} - \sum_{i=2}^{n} S(\lfloor \frac{n}{i} \rfloor ) \\ \]

简单的数学题

\[\sum_{i=1}^{n} \sum_{j=1}^{n} ijgcd(i,j) \\ \\ =\sum_{i=1}^{n} \sum_{j=1}^{n} ij \sum_{d|i,d|j} \varphi(d) \\ \\ =\sum_{d=1}^{n} \varphi (d) \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor} ijd^2 \\ \\ =\sum_{d=1}^{n} \varphi (d) d^2 \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor} ij \\ \\ =\sum_{d=1}^{n} \varphi (d) d^2 \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} i \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor} j \\ \\ =\sum_{d=1}^{n} \varphi (d) d^2 \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} i \frac{\lfloor \frac{n}{d} \rfloor(\lfloor \frac{n}{d} \rfloor-1)}{2} \\ \\ =\sum_{d=1}^{n} \varphi (d) d^2 \left( \frac{\lfloor \frac{n}{d} \rfloor(\lfloor \frac{n}{d} \rfloor-1)}{2} \right) ^2 \]

后面那一坨可以整除分块,前面 \(\varphi (d) d^2\) 只能杜教筛(我也不知道可不可以 min 25)。

我们设 \(g(n)\)\(ID ^2\)

\[((ID^2 * f) * ID^2) \\ \\ =\sum_{d|n} d^2 \left(\frac{n}{d} \right)^2 f(\frac{n}{d}) \\ \\ =\sum_{d|n} n^2 f(\frac{n}{d}) \\ \\ =n^2 \sum_{d|n} f(\frac{n}{d}) \\ \\ =n^3 \\ \\ \therefore S(n)=\sum_{i=1}^{n} i^3 - \sum_{i=2}^{n} i^2 S\left( \lfloor \frac{n}{d} \rfloor \right) \]

整除分块即可。

[bzoj4176] Lucas的数论

首先你要证明一个结论 \(f(ij) = \sum_{p|i} \sum_{q|j} [gcd(p,q)==1]\)

对于 \(ij\) 每一个质因子 \(x\)\(i\) 中出现了 \(a\) 次,在 \(j\) 中出现了 \(b\) 次,那么总共有 \(a+b+1\) 中情况。

然后进行转换,对于任意一个要选 \(q\) 个的情况:

\(q \le a\) ,就在 \(i\) 中选 \(a\) 个,\(j\) 不选

否则就在 \(j\) 中选 \(q-a\) 个,为了不重复计数,假设我们实际在 \(j\) 中选了 \(z\) 个,那么总共就选了 \(z+a\) 个。

对于每一个质因子都这么考虑,那么不难得出只有互质时才能算一种方案。

\[\sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{p|i} \sum_{q|j} [gcd(p,q)==1] \\ \\ =\sum_{i=1}^{n} \sum_{j=1}^{n} \lfloor \frac{n}{i} \rfloor \lfloor \frac{n}{j} \rfloor \sum_{d|i,d|j} \mu (d) \\ \\ =\sum_{d=1}^{n} \mu (d) \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor } \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor } \lfloor \frac{n}{id} \rfloor \lfloor \frac{n}{jd} \rfloor \\ \\ =\sum_{d=1}^{n} \mu (d) \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor } \lfloor \frac{n}{id} \rfloor \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor } \lfloor \frac{n}{jd} \rfloor \]

前面杜教筛预处理 \(\mu\) 的前缀和,后面整除分块即可。

[bzoj4196] 神犇和蒟蒻

\(\sum_{i=1}^{n} \mu (i^2)\) 是什么sb?直接输出 \(1\) 不就好了。

\(\sum_{i=1}^{n} \varphi (i^2)\) 考虑杜教筛。

\[g(1)S(n) = \sum_{i=1}^{n} (f* g)(i) - \sum_{i=2}^{n} g(i)S(\lfloor \frac{n}{i} \rfloor) \]

我们让 \(g = ID\)

这样

\[f * g = \sum_{d|n} \varphi (\frac{n}{d}) \frac{n}{d} d \\ \\ =\sum_{d|n} n \varphi (\frac{n}{d}) \\ \\ =n \sum_{d|n} \varphi (\frac{n}{d}) \\ \\ =n^2\\ \\ \therefore S(n) = \sum_{i=1}^{n} n^2 - \sum_{i=2}^{n} iS(\lfloor \frac{n}{i} \rfloor) \]

[[CQOI2015]选数]

题目要我们求

\[\sum_{a_1=L}^{H} \sum_{a_2=L}^{H} \cdots \sum_{a_n=L}^{H} [gcd(a_1,a_2,a_3,\cdots ,a_n) == K] \]

反演一下

\[\sum_{a_1=L}^{H} \sum_{a_2=L}^{H} \cdots \sum_{a_n=L}^{H} [gcd(a_1,a_2,a_3,\cdots ,a_n) == K] \\ \\ =\sum_{a_1=\frac{L-1}{K}+1 }^{\big\lfloor \frac{H}{K} \big\rfloor } \sum_{a_2=\frac{L-1}{K}+1 }^{\big\lfloor \frac{H}{K} \big\rfloor } \cdots \sum_{a_n=\frac{L-1}{K}+1 }^{\big\lfloor \frac{H}{K} \big\rfloor } \sum_{d|a1,d|a2,\cdots , d|a_n } \mu (d) \\ \\ = \sum_{d=1}^{\big\lfloor \frac{H}{K} \big\rfloor } \mu (d) \left( \bigg\lfloor \frac{H}{Kd} \bigg\rfloor - \bigg\lfloor \frac{L-1}{Kd} \bigg\rfloor \right) ^n \\ \\ \]

前面筛一个 \(\mu\) ,后面整除分块即可。

posted @ 2021-08-24 11:30  redproblemdog  阅读(51)  评论(0)    收藏  举报