没有看懂题目呢说的是什么,但是我们要求的是这个式子
[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)也会很大,所以还要杜教筛一个欧拉函数
代码
怎么可能有