一个筛法问题

一个筛法问题

来自 qwaszx。

如果 f(i) 是积性函数,想要求解 i=1nf(ix) 的值。之前遇到过这个问题,是 f=φμ2(x)=1 的情况,现在来看一下通解应该怎么处理,先看看 μ 咋做。

假设 μ2(x)=1μ(ix) 并不是积性函数,但我们想处理积性函数,于是当 ij 时观察 μ(ix)μ(jx)μ(ijx)i,j 其中一个与 x 不互质那么两侧都是 0;否则 i,j,x 两两互质,那么左侧是 μ(i)μ(j)μ(x)μ(x),右侧是 μ(i)μ(j)μ(x),于是令 g(i)=μ(ix)/μ(x),那么 g(i) 就是一个积性函数了。

然后去考察 g 的贝尔级数,若 px,那么 gp(z)=1z,若 px 那么 gp(z)=1

凑杜教筛,另设积性函数 h,若 px,那么 hp(z)=11z,若 px 那么 hp(z)=1,此时 h(i)=[gcd(i,x)=1],称其为 1x

所以现在有 g1x=ϵ,如果能够求 1x 在所有 ni 位置处的前缀和就可以杜教筛 g 了,i=1n1x(i)=d|xnd,整除分块的时候要求 [l,r] 内有多少 x 的因子,注意到所有 r 都是 n 的基本和组,那么将这 O(n)nix 的所有质因子排序预处理前驱后继,这样就能在 O(n) 的时间复杂度计算 1x 的前缀和了。它同样可以线筛,那么现在就做到了 O(n2/3) 的复杂度。

同样来尝试 φ,即使 φ(ix) 并不是关于 i 的积性函数,但我们仍然去考虑它在质数次幂的取值形成的 ogf,若 px 那么 fp(z)=1z1pz,否则假设最大的正整数 k 使得 pkx,那么有 fp(z)=(p1)pk11pz,若设 g(i)=f(i)/φ(x),那么 pxgp(z) 就变为了 11pz,这里需要证一下 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],那么 gh=id,可以杜教筛。

这里的重点在于,f(x)=f(ix)/f(x) 是积性的,如果想求 f(ix) 的前缀和,就可以转化为求 f(x) 这个积性函数的前缀和问题。如果 f(x)=0 那么 x 存在质数次幂 pk 满足 f(pk)=0,于是有 pif(ix)=0,所以可以 nnp,xpx

杜爷是怎么想到这个东西呢?考虑 f(ix) 实际上对 x 的质因子的贝尔级数的系数进行了一个位移,不是积性的原因是常数项不为 1,那么除掉常数项就得到了这个构造。我愿称之为杜爷筛。

posted @   do_while_true  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
历史上的今天:
2021-08-24 「学习笔记」各类容斥反演总结

This blog has running: 1845 days 1 hours 34 minutes 19 seconds

点击右上角即可分享
微信分享提示