有用的结论:
1、若\(f(n),g(n)\)均为积性函数,则\(h_1(n)=f(n)g(n),h_2(n)=f*g\)均为积性函数(\(f*g\)表示两个函数的狄利克雷卷积)
2、\(\sigma_0(xy)= \sum_{i|x}\sum_{j|y}[gcd(i,j)=1]\)
证明:考虑将\(xy\)的每一个因数的一个映射.
记\(xy=\prod_{i=1}^m p_i^{\alpha_i}(\alpha _i>0),x=\prod p_i^{\gamma_i}(\gamma_i\geq 0); d|xy\)且\(d=\prod_{i=1}^m p_i^{\beta_i}(\beta_i\geq 0)\).那么对于\(d\),若将它映射到了两个数\(s,t\):对于它的每一个质因子\(p_i\),
(1) 若\(\beta_i\leq \gamma_i\),那么\(p^{\beta_i}\)就对\(s\)有贡献.
(2)若\(\beta_i> \gamma_i\),那么\(t\)就有一个\(p_i^{\beta_i-\gamma_i}\)的贡献.
最后将所有贡献相乘得到\(s,t\).
这样对\(xy\)的每一个质因子\(p_i\),\(p_i|s\)与\(p_i|t\)至多只有一个成立,于是我们通过构造了一个一一映射的方式证明了上述定理.
Sample 1
给定\(n,m,d\),求
\[\sum_{i=1}^n\sum_{j=1}^m [gcd(i,j)=d]
\]
sol:
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^m [gcd(i,j)=d]\\
=&\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}[gcd(i,j)=1]\\
=&\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}\sum_{k|gcd(i,j)}\mu(k)\\
=&\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor
\end{aligned}
\]
大力数论分块就完事了.
Sample 2
给定\(n,m\)求
\[\sum_{i=1}^n \sum_{j=1}^m gcd(i,j)
\]
直接用\(\varphi\)进行反演的话就十分的easy
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^m gcd(i,j)\\
=&\sum_{i=1}^n\sum_{j=1}^m \sum_{d|gcd(i,j)} \varphi(d)\\
=&\sum_{d=1}^n\varphi(d)\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor
\end{aligned}
\]
直接数论分块就完事了,但是我们如果按照以往使用\(\mu\)的话
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^m gcd(i,j)\\
=&\sum_{d=1}^nd\sum_{i=1}^m\sum_{j=1}^m[gcd(i,j)=d]\\
=&\sum_{d=1}^nd\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor
\end{aligned}
\]
直接做看起来是\(O(n\sqrt n)\)的,无法应对多组询问.这里有一个经典套路:我们设\(T=dk\),则:
\[\begin{aligned}
&\sum_{d=1}^nd\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor\\
=&\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum_{d|T}\mu(d)\frac{T}{d}
\end{aligned}
\]
记\(f(T)=\sum_{d|T}\mu(d)\frac{T}{d}\),显然\(f(T)=\mu *id\),于是\(f\)积性,可以直接大力线筛了
这里其实可以观察到\(\sum_{d|T}\mu(d)\frac{T}{d}=\varphi(T)\),本质就是个容斥原理数\(1-n\)中与\(n\)互质的数,写成卷积的形式就是\(id*\mu=\varphi\)
Sample 3
bzoj3529
先丢掉\(a\)的限制,就是求
\[\sum_{i=1}^n\sum_{j=1}^m\sigma_1(gcd(i,j))
\]
化一下式子可以得到
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^m\sigma_1(gcd(i,j))\\
=&\sum_{d=1}^n \sigma_1(d) \sum_{i=1}^n\sum_{j=1}^m [gcd(i,j)=d]\\
=&\sum_{d=1}^n\sigma_1(d)\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor
\end{aligned}
\]
好了,如果你还记得上面那个题,就知道这里肯定还要换元,设\(T=dk\)
\[\begin{aligned}
&\sum_{d=1}^n\sigma_1(d)\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor\\
=&\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum_{d|T}\sigma_1(d)\mu(\frac{T}{d})
\end{aligned}
\]
记\(f(T)=\sum_{d|T}\sigma_1(d)\mu(\frac{T}{d})=\sigma_1*\mu\),显然积性,但是由于数据小所以直接\(O(n\log_2 n)\)筛就完事了
那么就回来考虑\(a\)的限制,也就是只有\(\sigma_1(d)\leq a\)的\(d\)才会对答案有贡献,我们可以将\(\sigma_1(d)\)从小到大排序,同时将询问按照\(a\)的大小排序,每次将所有\(\sigma_1(d)\leq a\)的\(d\)枚举其倍数更新贡献,这个可以用树状数组维护,之后直接\(O(\sqrt n)\)回答询问即可
Sample 4
bzoj3994
给定\(n,m\),求
\[\sum_{i=1}^n\sum_{j=1}^m\sigma_0(ij)
\]
sol:
根据本文最开始的结论,有
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^m\sigma_0(ij)\\
=&\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]\\
=&\sum_{x=1}^n\sum_{y=1}^m{\lfloor\frac{n}{x}\rfloor}{\lfloor\frac{m}{y}\rfloor}[gcd(x,y)=1]\\
=&\sum_{x=1}^n\sum_{y=1}^m{\lfloor\frac{n}{x}\rfloor}{\lfloor\frac{m}{y}\rfloor}\sum_{d|gcd(x,y)} \mu(d)\\
=&\sum_{d=1}^n\mu(d)\sum_{x=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{y=1}^{\lfloor\frac{m}{d}\rfloor}
\lfloor\frac{n}{xd}\rfloor\lfloor\frac{m}{yd}\rfloor
\end{aligned}
\]
这里的问题是,我们并不能像之前那样令\(T=xd\),原因是这样的话\(yd\)会变得非常棘手,我们需要考虑一些更本质的东西。
令\(f(n)=\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor\),那么最终的答案可以写作
\[\sum_{d=1}^n\mu(d)f(\lfloor\frac{n}{d}\rfloor)f(\lfloor\frac{m}{d}\rfloor)
\]
现在考虑如何快速求\(f(n)\),把\(f(n)\)看做每次枚举一个因数\(i\),数一下有多少个数是它的倍数且\(\leq n\),于是不难发现\(f(n)=\sum_{i=1}^n\sigma_0(i)\),于是我们先\(O(n\log_2n)\)求出\(\sigma_0(n)\),再求其前缀和\(f\),最后套数论分块即可。