来自 qwaszx。
如果 f(i) 是积性函数,想要求解 ∑ni=1f(ix) 的值。之前遇到过这个问题,是 f=φ 且 μ2(x)=1 的情况,现在来看一下通解应该怎么处理,先看看 μ 咋做。
假设 μ2(x)=1,μ(ix) 并不是积性函数,但我们想处理积性函数,于是当 i⊥j 时观察 μ(ix)μ(jx) 和 μ(ijx):i,j 其中一个与 x 不互质那么两侧都是 0;否则 i,j,x 两两互质,那么左侧是 μ(i)μ(j)μ(x)μ(x),右侧是 μ(i)μ(j)μ(x),于是令 g(i)=μ(ix)/μ(x),那么 g(i) 就是一个积性函数了。
然后去考察 g 的贝尔级数,若 p∤x,那么 gp(z)=1−z,若 p∣x 那么 gp(z)=1.
凑杜教筛,另设积性函数 h,若 p∤x,那么 hp(z)=11−z,若 p∣x 那么 hp(z)=1,此时 h(i)=[gcd(i,x)=1],称其为 1x.
所以现在有 g∗1x=ϵ,如果能够求 1x 在所有 ⌊ni⌋ 位置处的前缀和就可以杜教筛 g 了,∑ni=11x(i)=∑d|x⌊nd⌋,整除分块的时候要求 [l,r] 内有多少 x 的因子,注意到所有 r 都是 n 的基本和组,那么将这 O(√n) 个 ⌊ni⌋ 和 x 的所有质因子排序预处理前驱后继,这样就能在 O(√n) 的时间复杂度计算 1x 的前缀和了。它同样可以线筛,那么现在就做到了 O(n2/3) 的复杂度。
同样来尝试 φ,即使 φ(ix) 并不是关于 i 的积性函数,但我们仍然去考虑它在质数次幂的取值形成的 ogf,若 p∤x 那么 fp(z)=1−z1−pz,否则假设最大的正整数 k 使得 pk∣x,那么有 fp(z)=(p−1)pk−11−pz,若设 g(i)=f(i)/φ(x),那么 p∣x 时 gp(z) 就变为了 11−pz,这里需要证一下 g 是个积性函数:
若 f(i) 是关于 i 的积性函数,若 f(x)≠0 那么 f(ix)/f(x) 是关于 i 的积性函数。直接按定义 f(ix)f(x)×f(jx)f(x)=f(ijx)f(x) 即 f(ix)f(jx)=f(ijx)f(x),此时考察一个质因子 p,假设它在 i,j,x 中的次幂分别是 ei,ej,ex,首先 ei,ej 至少有一个为 0,假设 ei=0,那么它对左侧的贡献是乘上 f(pex)f(pej+ex),对右侧的贡献是 f(pej+ex)f(pex),所以等式左右相等。
于是同样有 h(i)=[gcd(i,x)]=1],那么 g∗h=id,可以杜教筛。
这里的重点在于,f′(x)=f(ix)/f(x) 是积性的,如果想求 f(ix) 的前缀和,就可以转化为求 f′(x) 这个积性函数的前缀和问题。如果 f(x)=0 那么 x 存在质数次幂 pk 满足 f(pk)=0,于是有 p∤i 时 f(ix)=0,所以可以 n≤⌊np⌋,x←px.
杜爷是怎么想到这个东西呢?考虑 f(ix) 实际上对 x 的质因子的贝尔级数的系数进行了一个位移,不是积性的原因是常数项不为 1,那么除掉常数项就得到了这个构造。我愿称之为杜爷筛。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
2021-08-24 「学习笔记」各类容斥反演总结