【题目】HDU-6588 Function

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

题目大意

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

共有 T T T次询问, 1 ≤ T ≤ 11 1\le T\le 11 1T11 1 ≤ n ≤ 1 0 21 1\le n\le 10^{21} 1n1021


思路

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

⌊ i 3 ⌋ = k \lfloor\sqrt[3]{i}\rfloor=k 3i =k,得 k ≤ i 3 < k + 1 k\le\sqrt[3]{i}<k+1 k3i <k+1,即 k 3 ≤ i < ( k + 1 ) 3 k^3\le i<(k+1)^3 k3i<(k+1)3,因此原式化为

∑ i = 1 n gcd ⁡ ( ⌊ i 3 ⌋ , i ) = ∑ k = 1 ⌊ n 3 ⌋ ∑ i = k 3 min ⁡ { ( 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=13n i=k3min{(k+1)31,n}gcd(k,i)

k = ⌊ n 3 ⌋ k=\lfloor\sqrt[3]{n}\rfloor k=3n 时, i i i不能超过 n n n,所以不能取遍 k 3 k^3 k3 ( k + 1 ) 3 − 1 (k+1)^3-1 (k+1)31的值,需要单独处理。因此将上式中的 min ⁡ \min min展开:

∑ k = 1 ⌊ n 3 ⌋ − 1 ∑ i = k 3 ( k + 1 ) 3 − 1 gcd ⁡ ( k , i ) + ∑ i = ⌊ n 3 ⌋ 3 n gcd ⁡ ( ⌊ n 3 ⌋ , 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=13n 1i=k3(k+1)31gcd(k,i)+i=3n 3ngcd(⌊3n ,i)

这里需要使用一个结论: ∑ i = 1 n gcd ⁡ ( a , i ) = ∑ T ∣ a ⌊ n T ⌋ φ ( 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 ⌊ n 3 ⌋ − 1 [ ∑ i = 1 ( k + 1 ) 3 − 1 gcd ⁡ ( k , i ) − ∑ i = 1 k 3 − 1 gcd ⁡ ( k , i ) ] = ∑ k = 1 ⌊ n 3 ⌋ − 1 [ ∑ T ∣ k ⌊ ( k + 1 ) 3 − 1 T ⌋ φ ( T ) − ∑ T ∣ k ⌊ k 3 − 1 T ⌋ φ ( T ) ] = ∑ k = 1 ⌊ n 3 ⌋ − 1 ∑ T ∣ k φ ( T ) [ ⌊ ( k + 1 ) 3 − 1 T ⌋ − ⌊ k 3 − 1 T ⌋ ] = ∑ k = 1 ⌊ n 3 ⌋ − 1 ∑ T ∣ k φ ( T ) [ ( k 3 T + 3 k 2 T + 3 k T ) − ( k 3 T + ⌊ − 1 T ⌋ ) ] = ∑ k = 1 ⌊ n 3 ⌋ − 1 ∑ T ∣ k φ ( T ) [ 3 k 2 T + 3 k T + 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=13n 1 i=1(k+1)31gcd(k,i)i=1k31gcd(k,i) k=13n 1 TkT(k+1)31φ(T)TkTk31φ(T) k=13n 1Tkφ(T)[T(k+1)31Tk31]k=13n 1Tkφ(T)[(Tk3+3Tk2+3Tk)(Tk3+T1)]k=13n 1Tkφ(T)[3Tk2+3Tk+1]

枚举 T T T的值,由于 k k k T T T的倍数,记 j = k T j=\dfrac{k}{T} j=Tk,则 1 ≤ j ≤ ⌊ ⌊ n 3 ⌋ − 1 T ⌋ 1\le j\le\left\lfloor\dfrac{\lfloor\sqrt[3]{n}\rfloor-1}{T}\right\rfloor 1jT3n 1,简记为 1 ≤ j ≤ b 1\le j\le b 1jb,上式进一步化为

∑ T = 1 ⌊ n 3 ⌋ − 1 φ ( T ) ∑ j = 1 b [ 3 T j 2 + 3 j + 1 ] = ∑ T = 1 ⌊ n 3 ⌋ − 1 φ ( T ) [ 3 T ∑ j = 1 b j 2 + 3 ∑ j = 1 b j + ∑ j = 1 b 1 ] = ∑ T = 1 ⌊ n 3 ⌋ − 1 φ ( T ) [ b ( b + 1 ) ( 2 b + 1 ) 2 T + 3 b ( 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=13n 1φ(T)j=1b[3Tj2+3j+1]T=13n 1φ(T)[3Tj=1bj2+3j=1bj+j=1b1]T=13n 1φ(T)[2b(b+1)(2b+1)T+23b(b+1)+b]

T T T的范围为 O ( n 3 ) O(\sqrt[3]{n}) O(3n ),用线性筛 O ( n 3 ) O(\sqrt[3]{n}) O(3n )预处理 φ ( T ) \varphi(T) φ(T)后,可在 O ( n 3 ) O(\sqrt[3]{n}) O(3n )的时间内枚举 T T T算出上式。

还好我翻出了三年前的线性筛板子,不然这题没法做了。

后一部分化为

∑ i = 1 n gcd ⁡ ( ⌊ n 3 ⌋ , i ) − ∑ i = 1 ⌊ n 3 ⌋ 3 − 1 gcd ⁡ ( ⌊ n 3 ⌋ , i ) = ∑ T ∣ ⌊ n 3 ⌋ ⌊ n T ⌋ φ ( T ) − ∑ T ∣ ⌊ n 3 ⌋ ⌊ ⌊ n 3 ⌋ 3 − 1 T ⌋ φ ( T ) = ∑ T ∣ ⌊ n 3 ⌋ φ ( T ) [ ⌊ n T ⌋ − ⌊ ⌊ n 3 ⌋ 3 − 1 T ⌋ ] = ∑ T ∣ ⌊ n 3 ⌋ φ ( T ) [ ⌊ n T ⌋ − ( ⌊ n 3 ⌋ 3 T + ⌊ − 1 T ⌋ ) ] = ∑ T ∣ ⌊ n 3 ⌋ φ ( T ) [ ⌊ n T ⌋ − ⌊ n 3 ⌋ 3 T + 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=13n 31gcd(⌊3n ,i)T3n Tnφ(T)T3n T3n 31φ(T)T3n φ(T)[TnT3n 31]T3n φ(T)[Tn(T3n 3+T1)]T3n φ(T)[TnT3n 3+1]

这里 T T T的范围同样为 O ( n 3 ) O(\sqrt[3]{n}) O(3n ),不过由于 T T T ⌊ n 3 ⌋ \lfloor\sqrt[3]{n}\rfloor 3n 的因式,可在 O ( n 6 ) O(\sqrt[6]{n}) O(6n )的时间内枚举。

n n n的范围超过了long long,必要时可以使用__int128,但要谨慎使用,以防超时。


下面推导 ∑ i = 1 n gcd ⁡ ( a , i ) = ∑ T ∣ a ⌊ n T ⌋ φ ( 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)的值 d d d

∑ i = 1 n gcd ⁡ ( a , i ) = ∑ d ∣ a d ∑ i = 1 n [ 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)=d gcd(a,i)=d等价于 gcd ⁡ ( a d , i d ) = 1 \gcd\left(\dfrac{a}{d},\dfrac{i}{d}\right)=1 gcd(da,di)=1,记 k = i d k=\dfrac{i}{d} k=di,则 1 ≤ k ≤ ⌊ n d ⌋ 1\le k\le\left\lfloor\dfrac{n}{d}\right\rfloor 1kdn,上式化为

∑ d ∣ a d ∑ k = 1 ⌊ n d ⌋ [ gcd ⁡ ( a d , 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 ∣ a d ∑ k = 1 ⌊ n d ⌋ ε ( gcd ⁡ ( a d , k ) ) = ∑ d ∣ a d ∑ k = 1 ⌊ n d ⌋ ∑ t d ∣ 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 , t k,t k,t的枚举顺序,由于 k k k t t t的倍数,记 j = k t j=\dfrac{k}{t} j=tk,则 1 ≤ j ≤ ⌊ ⌊ n d ⌋ / t ⌋ = ⌊ n t d ⌋ 1\le j\le\left\lfloor\left.\left\lfloor\dfrac{n}{d}\right\rfloor\right/t\right\rfloor=\left\lfloor\dfrac{n}{td}\right\rfloor 1jdn/t=tdn,进而

∑ d ∣ a d ∑ t d ∣ a ∑ j = 1 ⌊ n t d ⌋ μ ( t ) = ∑ d ∣ a d ∑ t d ∣ a μ ( t ) ⌊ n t d ⌋ \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 ∣ n d μ ( n d ) \displaystyle\varphi(n)=\sum_{d|n}d\mu\left(\dfrac{n}{d}\right) φ(n)=dndμ(dn),令 t d = T td=T td=T,则 t = T d t=\dfrac{T}{d} t=dT,所以

∑ d ∣ a d ∑ T ∣ a , d ∣ T μ ( T d ) ⌊ n T ⌋ = ∑ T ∣ a ⌊ n T ⌋ ∑ d ∣ T d μ ( T d ) = ∑ T ∣ a ⌊ n T ⌋ φ ( 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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值