Luogu P5176 公约数

P5176 公约数

题意

TT 组数据,每组数据给出,n,m,pn, m, p,求:

i=1nj=1mk=1pgcd(ij,ik,jk)×gcd(i,j,k)×(gcd(i,j)gcd(i,k)×gcd(j,k)+gcd(i,k)gcd(i,j)×gcd(j,k)+gcd(j,k)gcd(i,j)×gcd(i,k))\sum_{i=1}^n\sum_{j=1}^m\sum_{k=1}^p\text{gcd}(i\cdot j,i\cdot k,j\cdot k)\times \gcd(i,j,k)\times \left(\frac{\gcd(i,j)}{\gcd(i,k)\times \gcd(j,k)}+\frac{\gcd(i,k)}{\gcd(i,j)\times \gcd(j,k)}+\frac{\gcd(j,k)}{\gcd(i,j)\times \gcd(i,k)}\right)

答案对 109+710^9+7 取模。

数据范围:107n,m,p2×10710^7\leqslant n, m, p\leqslant 2\times 10^7

思路

首先要看出来一个恒等式:

gcd(ij,ik,jk)=gcd(i,j)gcd(j,k)gcd(i,k)gcd(i,j,k)\text{gcd}(ij, ik, jk) = \frac{\text{gcd}(i, j)\cdot \text{gcd}(j, k)\cdot\text{gcd}(i, k)}{\text{gcd}(i, j, k)}

证明:

该问题可以转化为讨论一个素因数的情况。

i,j,ki, j, k 分别含有因数 pa,pb,pcp^a,p^b,p^c,不妨令 abca\leqslant b\leqslant c

则对于该素数 ppgcd(ij,ik,jk)=min(a+b,b+c,a+c)=a+b\text{gcd}(ij, ik, jk) = \min(a+b, b+c, a+c)=a+b

gcd(i,j)gcd(j,k)gcd(i,k)gcd(i,j,k)=min(a,b)+min(b,c)+min(a,c)min(a,b,c)=a+b+aa=a+b\frac{\text{gcd}(i, j)\text{gcd}(j,k)\text{gcd}(i,k)}{\text{gcd}(i,j,k)}=\min(a,b)+\min(b,c)+\min(a,c)-\min(a, b, c)=a+b+a-a=a+b

不难发现恒等式:min(a+b,b+c,a+c)=min(a,b)+min(b,c)+min(a,c)min(a,b,c)\min(a+b,b+c,a+c)=\min(a,b)+\min(b,c)+\min(a,c)-\min(a,b,c)

解释:左式的含义是将 a,b,ca,b,c 三者中最小的两者加起来,最小的两个数又有如下的表示法:

  • 最小的数可以被表示为 min(a,b,c)\min(a,b,c)
  • 第二小的数可以表示为 min(a,b)+min(b,c)+min(a,c)2min(a,b,c)\min(a,b)+\min(b,c)+\min(a,c)-2\min(a,b,c)

于是将再用这两种表示法加起来即得右式

QED

于是,对原式进行变形:

原式=i=1nj=1mk=1pgcd(i,j)2+gcd(i,k)2+gcd(j,k)2=pi=1nj=1mgcd(i,j)2+mi=1nk=1pgcd(i,k)2+nj=1mk=1pgcd(j,k)2f(n,m)=i=1nj=1mgcd(i,j)2原式=pf(n,m)+mf(n,p)+nf(m,p)\begin{aligned} \text{原式}&=\sum_{i=1}^n\sum_{j=1}^m\sum_{k=1}^p\text{gcd}(i,j)^2+\text{gcd}(i,k)^2+\text{gcd}(j,k)^2\\ &=p\sum_{i=1}^n\sum_{j=1}^m\text{gcd}(i,j)^2+m\sum_{i=1}^n\sum_{k=1}^p\text{gcd}(i,k)^2+n\sum_{j=1}^m\sum_{k=1}^p\text{gcd}(j,k)^2\\ \end{aligned}\\ \text{令} f(n, m) = \sum_{i=1}^n\sum_{j=1}^m\text{gcd}(i,j)^2\\ \text{原式}=p\cdot f(n, m)+m\cdot f(n, p)+n\cdot f(m, p)

问题转换为求解 g(n,m)g(n, m)

g(n,m)=i=1nj=1mgcd(i,j)2=d=1min(n,m)i=1nj=1m[gcd(i,j)=d]d2=d=1min(n,m)d2i=1ndj=1md[gcd(i,j)=1]=d=1min(n,m)d2i=1ndj=1mdtgcd(i,j)μ(t)=d=1min(n,m)d2t=1min(nd,md)μ(t)i=1ndtj=1mdt1=d=1min(n,m)d2t=1min(nd,md)μ(t)ndtmdt=T=dtT=1min(n,m)nTmTdTd2μ(Td)g(n)=dnd2μ(nd)原式=T=1min(n,m)nTmTg(T)\begin{aligned} g(n,m)&=\sum_{i=1}^n\sum_{j=1}^m\text{gcd}(i,j)^2\\ &=\sum_{d=1}^{\min(n,m)}\sum_{i=1}^n\sum_{j=1}^m[\text{gcd}(i, j)=d]\cdot d^2\\ &=\sum_{d=1}^{\min(n,m)}d^2\sum_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{d}\right\rfloor}[\text{gcd}(i,j)=1]\\ &=\sum_{d=1}^{\min(n,m)}d^2\sum_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{d}\right\rfloor}\sum_{t|\text{gcd}(i,j)}\mu(t)\\ &=\sum_{d=1}^{\min(n,m)}d^2\sum_{t=1}^{\min(\left\lfloor\frac{n}{d}\right\rfloor,\left\lfloor\frac{m}{d}\right\rfloor)}\mu(t)\sum_{i=1}^{\left\lfloor\frac{n}{dt}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{dt}\right\rfloor}1\\ &=\sum_{d=1}^{\min(n,m)}d^2\sum_{t=1}^{\min(\left\lfloor\frac{n}{d}\right\rfloor,\left\lfloor\frac{m}{d}\right\rfloor)}\mu(t)\left\lfloor\frac{n}{dt}\right\rfloor\left\lfloor\frac{m}{dt}\right\rfloor\\ &\xlongequal{\text{令}T=dt}\sum_{T=1}^{\min(n, m)}\left\lfloor\frac{n}{T}\right\rfloor\left\lfloor\frac{m}{T}\right\rfloor\sum_{d|T}d^2\mu(\frac{T}{d})\\ \end{aligned}\\ \text{令} g(n)=\sum_{d|n}d^2\mu(\frac{n}{d})\\ \text{原式}=\sum_{T=1}^{\min(n,m)}\left\lfloor\frac{n}{T}\right\rfloor\left\lfloor\frac{m}{T}\right\rfloor g(T)

其中,对 T=dtT=dt 的换元思路来自于杜教筛。

于是,如果我们能预处理出来 g(n)g(n),那么每次询问使用数论分块就可以做到 O(N)O(\sqrt N) 求解了。

不难发现 g=Id2μg = \text{Id}^2\ast\mu,则 gg 是一个积性函数,由于积性函数基本都可以使用线性筛求出,下面求递推式,类似LCMSUM - LCM Sum中的线性筛法

  • g(1)=1g(1)=1

  • g(p)=μ(p)+p2μ(1)=p21g(p)=\mu(p)+p^2\mu(1)=p^2-1

  • g(pk)=μ(pk)+p2μ(pk1)+p4μ(pk2)++p2(k1)μ(p)+p2kμ(1)=0++0p2(k1)+p2k=p2k2(p21)\begin{aligned}g(p^k)&=\mu(p^k)+p^2\mu(p^{k-1})+p^4\mu(p^{k-2})+\cdots+p^{2(k-1)}\mu(p)+p^{2k}\mu(1)\\&=0+\cdots+0-p^{2(k-1)}+p^{2k}\\&=p^{2k-2}(p^2-1)\end{aligned}

i=apk,(gcd(a,p)=1,k1)i=a\cdot p^k, (\text{gcd}(a,p)=1,k\geqslant 1),求 g(ip)g(i\cdot p) 的递推式。

g(ip)=g(a)g(pk+1)=g(a)p2k(p21)g(i)=g(a)g(pk)=g(a)p2k2(p21)g(ip)=p2g(i)\begin{aligned} &g(i\cdot p)=g(a)g(p^{k+1})=g(a)p^{2k}(p^2-1)\\ &g(i)=g(a)g(p^k)=g(a)p^{2k-2}(p^2-1)\\ \Rightarrow &g(i\cdot p)=p^2\cdot g(i) \end{aligned}

于是就可以使用线性筛进行递推了。

总复杂度 O(Tn)O(T\sqrt n)


Luogu P5176 公约数
https://wty-yy.github.io/posts/1294/
作者
wty
发布于
2021年8月21日
许可协议