首先
n∑i=1i=n∗(n+1)2
n∑i=1i2=n∗(n+1)∗(2n+1)6
n∑i=1i3=(n∑i=1i)2
P3911 最小公倍数之和
求
n∑i=1n∑j=1lcm(Ai,Aj)
观察值域,发现与 n 同阶,记 ci 表示数字 i 出现次数。
n∑i=1n∑j=1lcm(i,j)∗ci∗cj
n∑i=1n∑j=1i∗j(i,j)∗ci∗cj
n∑d=1n∑i=1n∑j=1i∗jd∗ci∗cj∗[(i,j)=d]
n∑d=1dnd∑i=1nd∑j=1i∗j∗cid∗cjd∗[(i,j)=1]
n∑d=1dnd∑i=1nd∑j=1i∗j∗cid∗cjd∗∑k|(i,j)μ(k)
n∑d=1dnd∑k=1μ(k)∗k2∗ndk∑i=1ndk∑j=1i∗j∗cidk∗cjdk
设 T=dk 枚举 T
n∑T=1T∑k|Tμ(k)∗k∗(nT∑i=1ciT∗i)2
因为枚举 dk,而 k 是必须枚举的,所以可以省略掉 d。然后原来有 ∑nd=1d,可以从后面找个 k 组成 T。
考虑枚举的是 T=dk,所以一定有 k|T.
最后预处理出 ∑k|Tμ(k)∗k,暴力做(∑nTi=1ciT∗i)2.
因为 ∑ni=1ni 这样子是个调和级数的形式,所以后面暴力是 O(nlnn)的。
Code
较为困难的LCM
求
n∑i=1n∑j=1lcm(i,j)
n≤1010
那么我们没办法用 O(nlnn) 的办法了。
先化简下
n∑i=1n∑j=1i∗j(i,j)
n∑d=1n∑i=1n∑j=1i∗jd∗[(i,j)=d]
n∑d=1dnd∑i=1nd∑j=1i∗j∗[(i,j)=1]
记
h(n)=n∑i=1i∗[(i,n)=1]
这个东西就等于(实际上是我 oeis 出来的)
n∗ϕ(n)+[n=1]2
考虑证明下
已有 gcd(i,n)=1.
若有一个数 d,(d≠1) 使得 gcd(n,(n−i))=d.
那么 n%d=0,(n−i)%d=0⟹i%d=0
那么 gcd(i,n)=d.
所以可得,已有 gcd(i,n)=1⟹gcd(n,(n−i))=1.
考虑 i,n−i 成对出现,且对答案贡献是 n.
则去重后答案为 n∗ϕ(n)+[n=1]2.
那么
ans=n∑d=1dnd∑i=1nd∑j=1i∗j∗[(i,j)=1]
n∑d=1dnd∑i=1i∗2∗h(i)−1
n∑d=1dnd∑i=1i∗2∗i∗ϕ(i)+[i=1]2−1
n∑d=1dnd∑i=1i2∗ϕ(i)
因为 [i=1] 与 −1 抵消了。
记
S(n)=n∑i=1i2∗ϕ(i)
那么
ans=n∑d=1d∗S(nd)
记
f(x)=x2∗ϕ(x),g(x)=x2.
那么
(f∗g)(n)=∑d|nf(d)g(nd)=n3
这里省略的可以在这里找到。
接下来就是杜教筛了。
最后整个 ans 来个整除分块。
Code
__EOF__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】