【题目】HDU-6588 Function

本文介绍了一种解决特定数学问题的有效算法,该问题要求计算一个涉及立方根的复杂求和表达式,并通过巧妙变换将问题规模从极大值缩减至可处理范围,最终给出一种高效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是万万没想到2022年了我居然还有机会写题解……

题目大意

∑i=1ngcd⁡(⌊i3⌋,i) mod 998244353\displaystyle\sum_{i=1}^n\gcd(\lfloor\sqrt[3]{i}\rfloor,i)\bmod 998244353i=1ngcd(⌊3i,i)mod998244353

共有TTT次询问,1≤T≤111\le T\le 111T111≤n≤10211\le n\le 10^{21}1n1021


思路

注意到nnn的上限102110^{21}1021非常大(甚至爆了long long),枚举iii显然是不可行的。但是式子中出现了⌊i3⌋\lfloor\sqrt[3]{i}\rfloor3i,如果枚举⌊i3⌋\lfloor\sqrt[3]{i}\rfloor3i,上限就变成了10710^7107,复杂度刚好可以接受。因此初步猜测每次询问的复杂度为O(n3)O(\sqrt[3]{n})O(3n)

⌊i3⌋=k\lfloor\sqrt[3]{i}\rfloor=k3i=k,得k≤i3<k+1k\le\sqrt[3]{i}<k+1k3i<k+1,即k3≤i<(k+1)3k^3\le i<(k+1)^3k3i<(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=1ngcd(⌊3i,i)=k=13ni=k3min{(k+1)31,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)31的值,需要单独处理。因此将上式中的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=13n1i=k3(k+1)31gcd(k,i)+i=3n3ngcd(⌊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=1ngcd(a,i)=TaTnφ(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=13n1i=1(k+1)31gcd(k,i)i=1k31gcd(k,i)k=13n1TkT(k+1)31φ(T)TkTk31φ(T)k=13n1Tkφ(T)[T(k+1)31Tk31]k=13n1Tkφ(T)[(Tk3+3Tk2+3Tk)(Tk3+T1)]k=13n1Tkφ(T)[3Tk2+3Tk+1]

枚举TTT的值,由于kkkTTT的倍数,记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\rfloor1jT3n1,简记为1≤j≤b1\le j\le b1jb,上式进一步化为

∑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=13n1φ(T)j=1b[3Tj2+3j+1]T=13n1φ(T)[3Tj=1bj2+3j=1bj+j=1b1]T=13n1φ(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=1ngcd(⌊3n,i)i=13n31gcd(⌊3n,i)T3nTnφ(T)T3nT3n31φ(T)T3nφ(T)[TnT3n31]T3nφ(T)[Tn(T3n3+T1)]T3nφ(T)[TnT3n3+1]

这里TTT的范围同样为O(n3)O(\sqrt[3]{n})O(3n),不过由于TTT⌊n3⌋\lfloor\sqrt[3]{n}\rfloor3n的因式,可在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=1ngcd(a,i)=TaTnφ(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=1ngcd(a,i)=dadi=1n[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\rfloor1kdn,上式化为

∑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]dadk=1dn[gcd(da,k)=1]

利用ε(n)=[n=1]=∑d∣nμ(d)\displaystyle\varepsilon(n)=[n=1]=\sum_{d|n}\mu(d)ε(n)=[n=1]=dnμ(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}=dadk=1dnε(gcd(da,k))dadk=1dntda,tkμ(t)

交换k,tk,tk,t的枚举顺序,由于kkkttt的倍数,记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\rfloor1jdn/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}=dadtdaj=1tdnμ(t)dadtdaμ(t)tdn

再利用φ(n)=∑d∣ndμ(nd)\displaystyle\varphi(n)=\sum_{d|n}d\mu\left(\dfrac{n}{d}\right)φ(n)=dndμ(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}==dadTa,dTμ(dT)TnTaTndTdμ(dT)TaTnφ(T)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值