学这个之前,你得先了解 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\) ,后面整除分块即可。