我是万万没想到2022年了我居然还有机会写题解……
题目大意
求∑i=1ngcd(⌊i3⌋,i) mod 998244353\displaystyle\sum_{i=1}^n\gcd(\lfloor\sqrt[3]{i}\rfloor,i)\bmod 998244353i=1∑ngcd(⌊3i⌋,i)mod998244353。
共有TTT次询问,1≤T≤111\le T\le 111≤T≤11,1≤n≤10211\le n\le 10^{21}1≤n≤1021。
思路
注意到nnn的上限102110^{21}1021非常大(甚至爆了long long
),枚举iii显然是不可行的。但是式子中出现了⌊i3⌋\lfloor\sqrt[3]{i}\rfloor⌊3i⌋,如果枚举⌊i3⌋\lfloor\sqrt[3]{i}\rfloor⌊3i⌋,上限就变成了10710^7107,复杂度刚好可以接受。因此初步猜测每次询问的复杂度为O(n3)O(\sqrt[3]{n})O(3n)。
令⌊i3⌋=k\lfloor\sqrt[3]{i}\rfloor=k⌊3i⌋=k,得k≤i3<k+1k\le\sqrt[3]{i}<k+1k≤3i<k+1,即k3≤i<(k+1)3k^3\le i<(k+1)^3k3≤i<(k+1)3,因此原式化为
∑i=1ngcd(⌊i3⌋,i)=∑k=1⌊n3⌋∑i=k3min{(k+1)3−1,n}gcd(k,i)\sum_{i=1}^n\gcd(\lfloor\sqrt[3]{i}\rfloor,i)=\sum_{k=1}^{\lfloor\sqrt[3]{n}\rfloor}\sum_{i=k^3}^{\min\{(k+1)^3-1,n\}}\gcd(k,i)i=1∑ngcd(⌊3i⌋,i)=k=1∑⌊3n⌋i=k3∑min{(k+1)3−1,n}gcd(k,i)
k=⌊n3⌋k=\lfloor\sqrt[3]{n}\rfloork=⌊3n⌋时,iii不能超过nnn,所以不能取遍k3k^3k3到(k+1)3−1(k+1)^3-1(k+1)3−1的值,需要单独处理。因此将上式中的min\minmin展开:
∑k=1⌊n3⌋−1∑i=k3(k+1)3−1gcd(k,i)+∑i=⌊n3⌋3ngcd(⌊n3⌋,i)\sum_{k=1}^{\lfloor\sqrt[3]{n}\rfloor-1}\sum_{i=k^3}^{(k+1)^3-1}\gcd(k,i)+\sum_{i=\lfloor\sqrt[3]{n}\rfloor^3}^n\gcd(\lfloor\sqrt[3]{n}\rfloor,i)k=1∑⌊3n⌋−1i=k3∑(k+1)3−1gcd(k,i)+i=⌊3n⌋3∑ngcd(⌊3n⌋,i)
这里需要使用一个结论:∑i=1ngcd(a,i)=∑T∣a⌊nT⌋φ(T)\displaystyle\sum_{i=1}^n\gcd(a,i)=\sum_{T|a}\left\lfloor\dfrac{n}{T}\right\rfloor\varphi(T)i=1∑ngcd(a,i)=T∣a∑⌊Tn⌋φ(T)。推导过程放在最后。
于是对上式进一步化简。前一部分化为
∑k=1⌊n3⌋−1[∑i=1(k+1)3−1gcd(k,i)−∑i=1k3−1gcd(k,i)]=∑k=1⌊n3⌋−1[∑T∣k⌊(k+1)3−1T⌋φ(T)−∑T∣k⌊k3−1T⌋φ(T)]=∑k=1⌊n3⌋−1∑T∣kφ(T)[⌊(k+1)3−1T⌋−⌊k3−1T⌋]=∑k=1⌊n3⌋−1∑T∣kφ(T)[(k3T+3k2T+3kT)−(k3T+⌊−1T⌋)]=∑k=1⌊n3⌋−1∑T∣kφ(T)[3k2T+3kT+1]\begin{aligned} &\sum_{k=1}^{\lfloor\sqrt[3]{n}\rfloor-1}\left[\sum_{i=1}^{(k+1)^3-1}\gcd(k,i)-\sum_{i=1}^{k^3-1}\gcd(k,i)\right]\\ =&\sum_{k=1}^{\lfloor\sqrt[3]{n}\rfloor-1}\left[\sum_{T|k}\left\lfloor\dfrac{(k+1)^3-1}{T}\right\rfloor\varphi(T)-\sum_{T|k}\left\lfloor\dfrac{k^3-1}{T}\right\rfloor\varphi(T)\right]\\ =&\sum_{k=1}^{\lfloor\sqrt[3]{n}\rfloor-1}\sum_{T|k}\varphi(T)\left[\left\lfloor\dfrac{(k+1)^3-1}{T}\right\rfloor-\left\lfloor\dfrac{k^3-1}{T}\right\rfloor\right]\\ =&\sum_{k=1}^{\lfloor\sqrt[3]{n}\rfloor-1}\sum_{T|k}\varphi(T)\left[\left(\dfrac{k^3}{T}+3\dfrac{k^2}{T}+3\dfrac{k}{T}\right)-\left(\dfrac{k^3}{T}+\left\lfloor-\dfrac{1}{T}\right\rfloor\right)\right]\\ =&\sum_{k=1}^{\lfloor\sqrt[3]{n}\rfloor-1}\sum_{T|k}\varphi(T)\left[3\dfrac{k^2}{T}+3\dfrac{k}{T}+1\right] \end{aligned}====k=1∑⌊3n⌋−1⎣⎡i=1∑(k+1)3−1gcd(k,i)−i=1∑k3−1gcd(k,i)⎦⎤k=1∑⌊3n⌋−1⎣⎡T∣k∑⌊T(k+1)3−1⌋φ(T)−T∣k∑⌊Tk3−1⌋φ(T)⎦⎤k=1∑⌊3n⌋−1T∣k∑φ(T)[⌊T(k+1)3−1⌋−⌊Tk3−1⌋]k=1∑⌊3n⌋−1T∣k∑φ(T)[(Tk3+3Tk2+3Tk)−(Tk3+⌊−T1⌋)]k=1∑⌊3n⌋−1T∣k∑φ(T)[3Tk2+3Tk+1]
枚举TTT的值,由于kkk是TTT的倍数,记j=kTj=\dfrac{k}{T}j=Tk,则1≤j≤⌊⌊n3⌋−1T⌋1\le j\le\left\lfloor\dfrac{\lfloor\sqrt[3]{n}\rfloor-1}{T}\right\rfloor1≤j≤⌊T⌊3n⌋−1⌋,简记为1≤j≤b1\le j\le b1≤j≤b,上式进一步化为
∑T=1⌊n3⌋−1φ(T)∑j=1b[3Tj2+3j+1]=∑T=1⌊n3⌋−1φ(T)[3T∑j=1bj2+3∑j=1bj+∑j=1b1]=∑T=1⌊n3⌋−1φ(T)[b(b+1)(2b+1)2T+3b(b+1)2+b]\begin{aligned} &\sum_{T=1}^{\lfloor\sqrt[3]{n}\rfloor-1}\varphi(T)\sum_{j=1}^{b}[3Tj^2+3j+1]\\ =&\sum_{T=1}^{\lfloor\sqrt[3]{n}\rfloor-1}\varphi(T)\left[3T\sum_{j=1}^{b}j^2+3\sum_{j=1}^{b}j+\sum_{j=1}^{b}1\right]\\ =&\sum_{T=1}^{\lfloor\sqrt[3]{n}\rfloor-1}\varphi(T)\left[\dfrac{b(b+1)(2b+1)}{2}T+\dfrac{3b(b+1)}{2}+b\right] \end{aligned}==T=1∑⌊3n⌋−1φ(T)j=1∑b[3Tj2+3j+1]T=1∑⌊3n⌋−1φ(T)[3Tj=1∑bj2+3j=1∑bj+j=1∑b1]T=1∑⌊3n⌋−1φ(T)[2b(b+1)(2b+1)T+23b(b+1)+b]
TTT的范围为O(n3)O(\sqrt[3]{n})O(3n),用线性筛O(n3)O(\sqrt[3]{n})O(3n)预处理φ(T)\varphi(T)φ(T)后,可在O(n3)O(\sqrt[3]{n})O(3n)的时间内枚举TTT算出上式。
还好我翻出了三年前的线性筛板子,不然这题没法做了。
后一部分化为
∑i=1ngcd(⌊n3⌋,i)−∑i=1⌊n3⌋3−1gcd(⌊n3⌋,i)=∑T∣⌊n3⌋⌊nT⌋φ(T)−∑T∣⌊n3⌋⌊⌊n3⌋3−1T⌋φ(T)=∑T∣⌊n3⌋φ(T)[⌊nT⌋−⌊⌊n3⌋3−1T⌋]=∑T∣⌊n3⌋φ(T)[⌊nT⌋−(⌊n3⌋3T+⌊−1T⌋)]=∑T∣⌊n3⌋φ(T)[⌊nT⌋−⌊n3⌋3T+1]\begin{aligned} &\sum_{i=1}^n\gcd(\lfloor\sqrt[3]{n}\rfloor,i)-\sum_{i=1}^{\lfloor\sqrt[3]{n}\rfloor^3-1}\gcd(\lfloor\sqrt[3]{n}\rfloor,i)\\ =&\sum_{T|\lfloor\sqrt[3]{n}\rfloor}\left\lfloor\dfrac{n}{T}\right\rfloor\varphi(T)-\sum_{T|\lfloor\sqrt[3]{n}\rfloor}\left\lfloor\dfrac{\lfloor\sqrt[3]{n}\rfloor^3-1}{T}\right\rfloor\varphi(T)\\ =&\sum_{T|\lfloor\sqrt[3]{n}\rfloor}\varphi(T)\left[\left\lfloor\dfrac{n}{T}\right\rfloor-\left\lfloor\dfrac{\lfloor\sqrt[3]{n}\rfloor^3-1}{T}\right\rfloor\right]\\ =&\sum_{T|\lfloor\sqrt[3]{n}\rfloor}\varphi(T)\left[\left\lfloor\dfrac{n}{T}\right\rfloor-\left(\dfrac{\lfloor\sqrt[3]{n}\rfloor^3}{T}+\left\lfloor-\dfrac{1}{T}\right\rfloor\right)\right]\\ =&\sum_{T|\lfloor\sqrt[3]{n}\rfloor}\varphi(T)\left[\left\lfloor\dfrac{n}{T}\right\rfloor-\dfrac{\lfloor\sqrt[3]{n}\rfloor^3}{T}+1\right] \end{aligned}====i=1∑ngcd(⌊3n⌋,i)−i=1∑⌊3n⌋3−1gcd(⌊3n⌋,i)T∣⌊3n⌋∑⌊Tn⌋φ(T)−T∣⌊3n⌋∑⌊T⌊3n⌋3−1⌋φ(T)T∣⌊3n⌋∑φ(T)[⌊Tn⌋−⌊T⌊3n⌋3−1⌋]T∣⌊3n⌋∑φ(T)[⌊Tn⌋−(T⌊3n⌋3+⌊−T1⌋)]T∣⌊3n⌋∑φ(T)[⌊Tn⌋−T⌊3n⌋3+1]
这里TTT的范围同样为O(n3)O(\sqrt[3]{n})O(3n),不过由于TTT是⌊n3⌋\lfloor\sqrt[3]{n}\rfloor⌊3n⌋的因式,可在O(n6)O(\sqrt[6]{n})O(6n)的时间内枚举。
nnn的范围超过了long long
,必要时可以使用__int128
,但要谨慎使用,以防超时。
下面推导∑i=1ngcd(a,i)=∑T∣a⌊nT⌋φ(T)\displaystyle\sum_{i=1}^n\gcd(a,i)=\sum_{T|a}\left\lfloor\dfrac{n}{T}\right\rfloor\varphi(T)i=1∑ngcd(a,i)=T∣a∑⌊Tn⌋φ(T)。枚举gcd(a,i)\gcd(a,i)gcd(a,i)的值ddd:
∑i=1ngcd(a,i)=∑d∣ad∑i=1n[gcd(a,i)=d]\sum_{i=1}^n\gcd(a,i)=\sum_{d|a}d\sum_{i=1}^n[\gcd(a,i)=d]i=1∑ngcd(a,i)=d∣a∑di=1∑n[gcd(a,i)=d]
其中gcd(a,i)=d\gcd(a,i)=dgcd(a,i)=d等价于gcd(ad,id)=1\gcd\left(\dfrac{a}{d},\dfrac{i}{d}\right)=1gcd(da,di)=1,记k=idk=\dfrac{i}{d}k=di,则1≤k≤⌊nd⌋1\le k\le\left\lfloor\dfrac{n}{d}\right\rfloor1≤k≤⌊dn⌋,上式化为
∑d∣ad∑k=1⌊nd⌋[gcd(ad,k)=1]\sum_{d|a}d\sum_{k=1}^{\scriptsize\left\lfloor\dfrac{n}{d}\right\rfloor}\left[\gcd\left(\dfrac{a}{d},k\right)=1\right]d∣a∑dk=1∑⌊dn⌋[gcd(da,k)=1]
利用ε(n)=[n=1]=∑d∣nμ(d)\displaystyle\varepsilon(n)=[n=1]=\sum_{d|n}\mu(d)ε(n)=[n=1]=d∣n∑μ(d),上式转化为
∑d∣ad∑k=1⌊nd⌋ε(gcd(ad,k))=∑d∣ad∑k=1⌊nd⌋∑td∣a,t∣kμ(t)\begin{aligned} &\sum_{d|a}d\sum_{k=1}^{\scriptsize\left\lfloor\dfrac{n}{d}\right\rfloor}\varepsilon\left(\gcd\left(\dfrac{a}{d},k\right)\right)\\ =&\sum_{d|a}d\sum_{k=1}^{\scriptsize\left\lfloor\dfrac{n}{d}\right\rfloor}\sum_{td|a,t|k}\mu(t) \end{aligned}=d∣a∑dk=1∑⌊dn⌋ε(gcd(da,k))d∣a∑dk=1∑⌊dn⌋td∣a,t∣k∑μ(t)
交换k,tk,tk,t的枚举顺序,由于kkk是ttt的倍数,记j=ktj=\dfrac{k}{t}j=tk,则1≤j≤⌊⌊nd⌋/t⌋=⌊ntd⌋1\le j\le\left\lfloor\left.\left\lfloor\dfrac{n}{d}\right\rfloor\right/t\right\rfloor=\left\lfloor\dfrac{n}{td}\right\rfloor1≤j≤⌊⌊dn⌋/t⌋=⌊tdn⌋,进而
∑d∣ad∑td∣a∑j=1⌊ntd⌋μ(t)=∑d∣ad∑td∣aμ(t)⌊ntd⌋\begin{aligned} &\sum_{d|a}d\sum_{td|a}\sum_{j=1}^{\scriptsize\left\lfloor\dfrac{n}{td}\right\rfloor}\mu(t)\\ =&\sum_{d|a}d\sum_{td|a}\mu(t)\left\lfloor\dfrac{n}{td}\right\rfloor \end{aligned}=d∣a∑dtd∣a∑j=1∑⌊tdn⌋μ(t)d∣a∑dtd∣a∑μ(t)⌊tdn⌋
再利用φ(n)=∑d∣ndμ(nd)\displaystyle\varphi(n)=\sum_{d|n}d\mu\left(\dfrac{n}{d}\right)φ(n)=d∣n∑dμ(dn),令td=Ttd=Ttd=T,则t=Tdt=\dfrac{T}{d}t=dT,所以
∑d∣ad∑T∣a,d∣Tμ(Td)⌊nT⌋=∑T∣a⌊nT⌋∑d∣Tdμ(Td)=∑T∣a⌊nT⌋φ(T)\begin{aligned} &\sum_{d|a}d\sum_{T|a,d|T}\mu\left(\dfrac{T}{d}\right)\left\lfloor\dfrac{n}{T}\right\rfloor\\ =&\sum_{T|a}\left\lfloor\dfrac{n}{T}\right\rfloor\sum_{d|T}d\mu\left(\dfrac{T}{d}\right)\\ =&\sum_{T|a}\left\lfloor\dfrac{n}{T}\right\rfloor\varphi(T) \end{aligned}==d∣a∑dT∣a,d∣T∑μ(dT)⌊Tn⌋T∣a∑⌊Tn⌋d∣T∑dμ(dT)T∣a∑⌊Tn⌋φ(T)