「Luogu-U18201」分析矿洞

题目

没有看懂题目呢说的是什么,但是我们要求的是这个式子

[Ans=sum_{i=1}^nsum_{j=1}^nvarphi(gcd^2(i,j)) ]

看起来挺鬼畜的是吧

老方法枚举(gcd)

[Ans=sum_{i=1}^nvarphi(i^2)f(left lfloor frac{n}{i} ight floor) ]

其中

[f(d)=sum_{i=1}^{left lfloor frac{n}{d} ight floor}sum_{j=1}^{left lfloor frac{n}{d} ight floor}[(i,j)=1] ]

非常显然的是

[f(d)=2 imes sum_{i=1}^dvarphi(i) -1 ]

于是可以考虑对(f(left lfloor frac{n}{i} ight floor))分块

所以我们需要的是(varphi(i^2))的前缀和

还有一个非常显然的东西就是

[varphi(i^2)=ivarphi(i) ]

考虑(varphi)的公式

(n)

[n=prodlimits_{i=1}^{N}p_{i}^{r_{i}} ]

[varphi(n)=prodlimits_{i=1}^{N}(p_i-1)p_i^{r_i-1} ]

[varphi(n^2)=prodlimits_{i=1}^{N}(p_i-1)p_i^{2r_i-1}=prodlimits_{i=1}^{N}(p_i-1)p_i^{r_i-1}p_i^{r_i} ]

[=prodlimits_{i=1}^{N}(p_i-1)p_i^{r_i-1} imes prodlimits_{i=1}^{N}p_{i}^{r_{i}}=varphi(n) imes n ]

于是设

[F(i)=ivarphi(i) ]

于是

[Ans=sum_{i=1}^nf(left lfloor frac{n}{i} ight floor)F(i) ]

(F)函数的前缀和即可

由于数据范围很大,考虑杜教筛

根据一番暴力枚举我们应该让(F)(id)卷一下

[(F imes id)(i)=sum_{d|i}dvarphi(d)frac{i}{d} ]

[=isum_{d|i}varphi(d)=i^2 ]

拿出杜教筛套路

[S(n)=sum_{i=1}^n(F imes id)(i)-sum_{i=2}^nid(i)S(left lfloor frac{n}{i} ight floor) ]

[=frac{n(n+1)(2n+1)}{6}-sum_{i=2}^nid(i)S(left lfloor frac{n}{i} ight floor) ]

不就没了吗

当然(left lfloor frac{n}{i} ight floor)也会很大,所以还要杜教筛一个欧拉函数

代码

怎么可能有

原文地址:https://www.cnblogs.com/asuldb/p/10339533.html