官方链接:LCMSUM - LCM Sum
洛谷搬运链接:SP5971 LCMSUM - LCM Sum
题意
有 T 次询问,每次询问给定 n,求
i=1∑nlcm(i,n)
1⩽T⩽3×105
1⩽n⩽106
思路
推式子:
i=1∑nlcm(i,m)=i=1∑ngcd(i,n)i⋅n=d∣n∑i=1∑ndi⋅n[gcd(i,n)=d]=d∣n∑i=1∑ndi⋅n[gcd(di,dn)=1]i=did∣n∑i=1∑dni⋅n[gcd(i,dn)=1]=nd∣n∑i=1∑di⋅[gcd(i,d)=1]
令 f(d)=∑i=1di⋅[gcd(i,d)=1],下面有两种方法对 f(d) 进行化简:
法1: 由简化剩余系的性质:
当 d=1 时:f(1)=1
当 d=1 时:
若 gcd(i,d)=1,则 gcd(d−i,d)=1,这说明简化剩余系中的元素一定是成对存在的,而且它们和正好是 d,简化剩余系大小为 φ(d)(也说明了为什么 φ(d) 一定是偶数)。
于是 f(d)=2φ(d)⋅d
法2: 用Dirichlet卷积变化:
f(n)=i=1∑di⋅[gcd(i,d)=1]=i=1∑di⋅t∣gcd(i,d)∑μ(t)=t∣d∑i=1∑d[t∣i]⋅i⋅μ(t)=t∣d∑i=1∑tdit⋅μ(t)=t∣d∑t⋅μ(t)i=1∑tdi=t∣d∑μ(t)⋅t⋅2(1+td)td=t∣d∑μ(t)⋅2(1+td)d=2d⋅t∣d∑(μ(t)+μ(t)⋅td)=2d⋅((μ∗1)(d)+(μ∗Id)(d))=2d⋅(ε(d)+φ(d))
其中的数论函数 ε,μ,1,Id 见 积性函数-例子。
两种解法结果相同,明显第一个简单多(
于是问题最终转化为求解:
2n(d∣n∑d⋅φ(d)+1)
设 g(n)=∑d∣nd⋅φ(d)。
又有两种方法求 g(n):
法1: 枚举法(复杂度 O(NlogN)):
用线性筛求 φ,然后直接枚举 d 即可。
法2: 线性筛法(复杂度 O(N)):
不难证明 g(n) 是积性函数,这样就可以使用筛法来求了,先算几个特殊值:
-
g(1)=1
-
g(p)=φ(1)⋅1+φ(p)⋅p=p(p−1)+1
-
g(pk)=1+∑i=1kφ(pi)⋅pi=1+∑i=1k(p−1)p2i−1
设 i=a⋅pw,w⩾1,gcd(a,p)=1,若我们在线性筛中要去求:g(i⋅p),则:
g(i⋅p)g(i)⇒g(i⋅p)−g(i)同理⇒g(i)−g(pi)⇒g(i⋅p)=g(a)⋅g(pw+1)=g(a)⋅g(pw)=g(a)⋅(p−1)p2w+1=g(a)⋅(p−1)p2w−1消去g(a)=g(i)+(g(i)−g(pi))⋅p2
总复杂度 O(N),下面代码使用线性筛法写的。
点击显/隐代码