Luogu P2257 YY的GCD

题目大意

给定 n , m n,m n,m,求 ∑ i = 1 n ∑ j = 1 m [ ( i , j ) ∈ p r i m e ] \sum_{i=1}^n\sum_{j=1}^m[(i,j)\in prime] i=1nj=1m[(i,j)prime]每个测试点有 T T T 组数据。
数据范围  1 ⩽ n , m ⩽ 1 0 7 , 1 ⩽ T ⩽ 1 0 4 1\leqslant n,m\leqslant10^7,1\leqslant T\leqslant 10^4 1n,m107,1T104

题解

先把 ( i , j ) ∈ p r i m e (i,j)\in prime (i,j)prime 提出来
∑ p ∈ p r i m e min ⁡ ( n , m ) ∑ i = 1 n ∑ j = 1 m [ ( i , j ) = p ] \sum_{p\in prime}^{\min(n,m)}\sum_{i=1}^n\sum_{j=1}^m[(i,j)=p] pprimemin(n,m)i=1nj=1m[(i,j)=p]

然后常规套路后面两个 sigma \text{sigma} sigma
原 式 = ∑ p ∈ p r i m e min ⁡ ( n , m ) ∑ i = 1 ⌊ n p ⌋ ∑ j = 1 ⌊ m p ⌋ [ ( i , j ) = 1 ] = ∑ p ∈ p r i m e min ⁡ ( n , m ) ∑ i = 1 ⌊ n p ⌋ ∑ j = 1 ⌊ m p ⌋ ∑ d ∣ i , d ∣ j μ ( d ) = ∑ p ∈ p r i m e min ⁡ ( n , m ) ∑ d = 1 min ⁡ ( ⌊ n p ⌋ , ⌊ m p ⌋ ) μ ( d ) ( ∑ i = 1 ⌊ n p ⌋ [ d ∣ i ] ) ( ∑ j = 1 ⌊ m p ⌋ [ d ∣ j ] ) = ∑ p ∈ p r i m e min ⁡ ( n , m ) ∑ d = 1 min ⁡ ( ⌊ n p ⌋ , ⌊ m p ⌋ ) μ ( d ) ⌊ n p d ⌋ ⌊ m p d ⌋ \begin{aligned} 原式&=\sum_{p\in prime}^{\min(n,m)}\sum_{i=1}^{\lfloor\frac np\rfloor}\sum_{j=1}^{\lfloor\frac mp\rfloor}[(i,j)=1]\\ &=\sum_{p\in prime}^{\min(n,m)}\sum_{i=1}^{\lfloor\frac np\rfloor}\sum_{j=1}^{\lfloor\frac mp\rfloor}\sum_{d|i,d|j}\mu(d)\\ &=\sum_{p\in prime}^{\min(n,m)}\sum_{d=1}^{\min(\lfloor\frac np\rfloor,\lfloor\frac mp\rfloor)}\mu(d)\Bigg(\sum_{i=1}^{\lfloor\frac np\rfloor}[d|i]\Bigg)\Bigg(\sum_{j=1}^{\lfloor\frac mp\rfloor}[d|j]\Bigg)\\ &=\sum_{p\in prime}^{\min(n,m)}\sum_{d=1}^{\min(\lfloor\frac np\rfloor,\lfloor\frac mp\rfloor)}\mu(d)\Big\lfloor\frac{n}{pd}\Big\rfloor\Big\lfloor\frac m{pd}\Big\rfloor \end{aligned} =pprimemin(n,m)i=1pnj=1pm[(i,j)=1]=pprimemin(n,m)i=1pnj=1pmdi,djμ(d)=pprimemin(n,m)d=1min(pn,pm)μ(d)(i=1pn[di])(j=1pm[dj])=pprimemin(n,m)d=1min(pn,pm)μ(d)pdnpdm

如此设 n n n 以内有 π ( n ) \pi(n) π(n) 个质数,则运行一次的时间复杂度为 T ( n ) = Θ ( π ( n ) × min ⁡ ( n , m ) ) T(n)=\Theta\Big(\pi(n)\times\sqrt{\min(n,m)}\Big) T(n)=Θ(π(n)×min(n,m) )根据素数定理,有 π ( n ) ∼ 1 ln ⁡ n \pi(n)\sim\dfrac{1}{\ln n} π(n)lnn1,因而程序的时间复杂度为 T ( n ) = Ω ( n + T × min ⁡ ( n , m ) ln ⁡ n ) T(n)=\Omega\Bigg(n+T\times\frac{\sqrt{\min(n,m)}}{\ln n}\Bigg) T(n)=Ω(n+T×lnnmin(n,m) )

按照题目的数据范围,计算得结果约为 6214206884.3 > 5 × 1 0 7 6214206884.3>5\times10^7 6214206884.3>5×107,而且素数定理的估计相对于我们的复杂度计算是乐观的,也就是说,结果可能会更大。因而我们只能考虑优化。

可以发现,第一个 sigma \text{sigma} sigma 的枚举顺序是没有前途的,是没有前途的,是没有前途的……因此我们要更换枚举顺序,至少不能让第一个 sigma \text{sigma} sigma 那么没有前途……尝试枚举 k = p d k=pd k=pd,则
原 式 = ∑ k = 1 min ⁡ ( n , m ) ∑ p ∈ p r i m e , p ∣ k min ⁡ ( n , m ) μ ( k p ) ⌊ n p d ⌋ ⌊ m p d ⌋ 原式=\sum_{k=1}^{\min(n,m)}\sum_{p\in prime,p|k}^{\min(n,m)}\mu\Big(\frac kp\Big)\Big\lfloor\frac{n}{pd}\Big\rfloor\Big\lfloor\frac m{pd}\Big\rfloor =k=1min(n,m)pprime,pkmin(n,m)μ(pk)pdnpdm

f ( n ) = ∑ p ∈ p r i m e , p ∣ k n μ ( k p ) f(n)=\sum_{p\in prime,p|k}^{n}\mu\Big(\frac kp\Big) f(n)=pprime,pknμ(pk) 原 式 = ∑ k = 1 min ⁡ ( n , m ) f ( min ( n , m ) ) ⌊ n p d ⌋ ⌊ m p d ⌋ 原式=\sum_{k=1}^{\min(n,m)}f\big(\text{min}(n,m)\big)\Big\lfloor\frac{n}{pd}\Big\rfloor\Big\lfloor\frac m{pd}\Big\rfloor =k=1min(n,m)f(min(n,m))pdnpdm

现在如果我们能够得到 f f f 的前缀和,那么就可以用除法分块了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值