营业日志 2020.11.6 多询问积性函数在组合数点取值

由于笔者对于积性函数的了解比较有限,本文所作工作纯属闭门造车,得到的结果可能也并不算优,仅作为抛砖引玉,欢迎大家提出优化意见。

问题 设定积性函数 f : Z > 0 → G f : \mathbb Z_{>0} \rightarrow G f:Z>0G,多次询问 ( n , m ) ↦ f ( ( n m ) ) (n,m) \mapsto f(\binom n m) (n,m)f((mn))。设 m ≤ n ≤ N m\le n\le N mnN,且询问 Q Q Q 次。其中 G G G 看作可以高效执行乘法的交换群。

下文我们不妨设 f ( 1 ) = 1 f(1) = 1 f(1)=1,且注意当 G G G F p × × Z \mathbb F_p^{\times } \times \mathbf Z Fp××Z 的时候可用于模拟 a ⋅ 0 k a \cdot 0^k a0k,也就可以用于进行我们喜闻乐见的   m o d   p \bmod p modp 上运算。

初步分析

我们定义 v p ( n ) = ∑ k ≥ 1 ⌊ n p k ⌋ v_p(n) = \sum_{k\ge 1} \lfloor \frac n{p^k} \rfloor vp(n)=k1pkn,易见 v p ( n ) v_p(n) vp(n) 实际上就是 n ! n! n! 其中所含质因子 p p p 的数量,我们记 f p ( α ) = f ( p α ) f_p(\alpha) = f(p^\alpha) fp(α)=f(pα) ,那么就有

f ( ( n m ) ) = ∏ p ∈ P f p ( v p ( n ) − v p ( m ) − v p ( n − m ) ) f\left(\binom n m\right)=\prod_{p\in \mathbb P} f_p(v_p(n)-v_p(m)-v_p(n-m)) f((mn))=pPfp(vp(n)vp(m)vp(nm))

由于 ⌊ n p k ⌋ − ⌊ m p k ⌋ − ⌊ n − m p k ⌋ ∈ { 0 , 1 } \lfloor \frac n{p^k} \rfloor - \lfloor \frac m{p^k} \rfloor - \lfloor \frac {n-m}{p^k} \rfloor \in \{0, 1\} pknpkmpknm{0,1} 表征了 n n n 减去 m m m 时在 p p p 进制下有没有向 p k p^k pk 对应位进行借位,我们可知 v p ( n ) − v p ( m ) − v p ( n − m ) ≤ log ⁡ p n v_p(n)-v_p(m)-v_p(n-m) \le \log _p n vp(n)vp(m)vp(nm)logpn,故对于 f p f_p fp 而言我们只需知晓 1 ≤ α ≤ log ⁡ p N 1\le \alpha \le \log_p N 1αlogpN 项,这等于说我们只需输入所有 p α ≤ N p^\alpha \le N pαN 部分的 f ( p α ) f(p^\alpha) f(pα) 信息。根据素数定理, # { p α ≤ N } = π ( N ) + O ( N ) ∼ N ln ⁡ N \#\{p^\alpha\le N\} = \pi(N) + \mathcal O(\sqrt N) \sim \frac N{\ln N} #{pαN}=π(N)+O(N )lnNN

接下来将在标题中给出各算法在 N , Q N,Q N,Q 同阶时的最优复杂度。

莫队算法 Θ ( N 3 / 2 ) \Theta(N^{3/2}) Θ(N3/2)

第一个有所优化的思路是将 ( n , m ) (n,m) (n,m) 看作二维点对,通过莫队算法规划一条路径来在过程中维护答案,为了平衡复杂度,可以考虑在路径规划过程中只考虑 > N 1 / c > N^{1/c} >N1/c 的质数,这样总是不超过 c c c 次修改,而剩下的在最后进行计算。这样就达到了 O ( Q N 1 / c log ⁡ N + c N Q ) \mathcal O(Q\frac{N^{1/c}}{\log N} + cN\sqrt Q) O(QlogNN1/c+cNQ ) 的复杂度。

然而这一做法实在是没有利用什么太多的问题性质。由于莫队算法存在以 Ω ( N Q ) \Omega(N\sqrt Q) Ω(NQ ) 这一路径长度的不可改进的下界,这一思路是没有什么前途的。

一阶判别式 Θ ( N 3 / 2 log ⁡ N ) \Theta(\frac{N^{3/2}}{\log N}) Θ(logNN3/2)

我们先考虑取 c = 2 c=2 c=2,观察对于 > N 1 / 2 >N^{1/2} >N1/2 的素数,此时 α ≤ 1 \alpha \le 1 α1,且其值只能由 α = ⌊ n p ⌋ − ⌊ m p ⌋ − ⌊ n − m p ⌋ \alpha =\lfloor \frac n p \rfloor -\lfloor \frac m p \rfloor -\lfloor \frac {n-m} p \rfloor α=pnpmpnm 贡献。我们记判别式有

χ p , k ( n , m ) = ⌊ n p k ⌋ − ⌊ m p k ⌋ − ⌊ n − m p k ⌋ \chi_{p,k}(n,m) = \left\lfloor \frac n{p^k} \right\rfloor - \left\lfloor \frac m{p^k} \right\rfloor - \left\lfloor \frac {n-m}{p^k} \right\rfloor χp,k(n,m)=pknpkmpknm

那么对于 > N 1 / 2 >N^{1/2} >N1/2 的部分,我们只需要考虑

∏ p ∈ P p > N 1 / 2 f p ( 1 ) χ p , 1 ( n , m ) = ∏ p ∈ P p > N 1 / 2 f p ( 1 ) ⌊ n p ⌋ − ⌊ m p ⌋ − ⌊ n − m p ⌋ \begin{aligned} &\quad \prod_{p\in \mathbb P \atop p>N^{1/2}} f_p(1)^{\chi_{p,1}(n,m)}\\ & =\prod_{p\in \mathbb P \atop p>N^{1/2}} f_p(1)^{\lfloor \frac n p \rfloor -\lfloor \frac m p \rfloor -\lfloor \frac {n-m} p \rfloor} \end{aligned} p>N1/2pPfp(1)χp,1(n,m)=p>N1/2pPfp(1)pnpmpnm

因此记

S ( n ) = ∏ p ∈ P p > N 1 / 2 f p ( 1 ) ⌊ n p ⌋ S(n)=\prod_{p\in \mathbb P \atop p>N^{1/2}} f_p(1)^{\lfloor \frac n p \rfloor} S(n)=p>N1/2pPfp(1)pn

那么这部分的贡献就仅仅是 S 1 ( n ) S 1 ( m ) S 1 ( n − m ) \frac{S_1(n)}{S_1(m)S_1(n-m)} S1(m)S1(nm)S1(n)

而我们预处理 S 1 ( n ) S_1(n) S1(n),只需对每个 p p p 进行 ⌊ N p ⌋ \lfloor \frac N p\rfloor pN 次修改,然后进行前缀积即可。

如果我们考虑预处理 > N 1 / c > N^{1/c} >N1/c 的质数( c ∈ [ 1 2 , 1 ] c\in [\frac 12, 1] c[21,1]),那么根据 Mertens 第二定理,这部分预处理的复杂度为 Θ ( N log ⁡ c ) = Θ ( N ) \Theta(N\log c) = \Theta(N) Θ(Nlogc)=Θ(N)

Mertens 第二定理
∑ p ∈ P p ≤ N 1 p = ln ⁡ ln ⁡ N + C + O ( 1 ln ⁡ N ) \sum_{p\in \mathbb P \atop p\le N} \frac 1 p = \ln \ln N + C + \mathcal O \left(\frac 1{\ln N}\right) pNpPp1=lnlnN+C+O(lnN1)

因此记 M ( N ) = ∑ p ∈ P ∧ p ≤ N 1 p M(N) = \sum_{p\in \mathbb P \wedge p\le N} \frac 1 p M(N)=pPpNp1,那么有
M ( N ) − M ( N 1 / c ) = ln ⁡ ln ⁡ N − ln ⁡ ln ⁡ N 1 / c + O ( 1 ln ⁡ N ) = ln ⁡ c + O ( 1 ln ⁡ N ) \begin{aligned}M(N) - M(N^{1/c}) &= \ln \ln N - \ln \ln N^{1/c} + \mathcal O\left(\frac 1{\ln N}\right) \\ &= \ln c + \mathcal O\left(\frac 1{\ln N}\right)\end{aligned} M(N)M(N1/c)=lnlnNlnlnN1/c+O(lnN1)=lnc+O(lnN1)

因此这一做法的复杂度为 Θ ( N + Q ⋅ N 1 / c log ⁡ N ) \Theta(N + Q \cdot \frac{N^{1/c}}{\log N}) Θ(N+QlogNN1/c)

二阶判别式 Θ ( N 4 / 3 log ⁡ N ) \Theta(\frac{N^{4/3}}{\log N}) Θ(logNN4/3)

我们考虑对于 2 < c ≤ 3 2 < c \le 3 2<c3 的情况。

我们考虑先算出 χ p , 1 \chi_{p,1} χp,1 χ p , 2 \chi_{p,2} χp,2 单独的情况,这些都是简单的。但是还需考虑到 p 1 , p 2 p^1,p^2 p1,p2 部分皆进位的情况。考虑直接将 χ p , 1 ⋅ χ p , 2 \chi_{p,1} \cdot \chi_{p,2} χp,1χp,2 展开:

χ p , 1 ( n , m ) ⋅ χ p , 2 ( n , m ) = ( ⌊ n p ⌋ − ⌊ m p ⌋ − ⌊ n − m p ⌋ ) ⋅ ( ⌊ n p 2 ⌋ − ⌊ m p 2 ⌋ − ⌊ n − m p 2 ⌋ ) \chi_{p,1}(n,m)\cdot \chi_{p,2} (n,m) = \left(\left\lfloor \frac n{p} \right\rfloor - \left\lfloor \frac m{p} \right\rfloor - \left\lfloor \frac {n-m}{p} \right\rfloor\right) \cdot \left(\left\lfloor \frac n{p^2} \right\rfloor - \left\lfloor \frac m{p^2} \right\rfloor - \left\lfloor \frac {n-m}{p^2} \right\rfloor\right) χp,1(n,m)χp,2(n,m)=(pnpmpnm)(p2np2mp2nm)

由于两位都已经作为 χ p , 1 , χ p , 2 \chi_{p,1}, \chi_{p,2} χp,1,χp,2 各自统计过一次了,所以我们现在需要做的是以 f p ( 2 ) f p ( 1 ) − 2 f_p(2)f_p(1)^{-2} fp(2)fp(1)2 为底,我们考虑

S 2 ( x , y ) = ∏ p ∈ P p > N 1 / c ( f p ( 2 ) f p ( 1 ) − 2 ) ⌊ x p ⌋ ⋅ ⌊ y p 2 ⌋ S_2(x,y) =\prod_{p\in \mathbb P \atop p>N^{1/c}} \left(f_p(2)f_p(1)^{-2}\right)^{\left\lfloor \frac xp\right\rfloor \cdot \left \lfloor \frac y{p^2} \right\rfloor} S2(x,y)=p>N1/cpP(fp(2)fp(1)2)pxp2y

注意到这已经是个二维数组了,但是我们可以将其看作二维数点。对于给定的素数 p p p,其对于 ( x , y ) (x,y) (x,y) 的影响是 ⌊ N p ⌋ ⋅ ⌊ N p 2 ⌋ \left\lfloor \frac Np\right\rfloor \cdot \left \lfloor \frac N{p^2} \right\rfloor pNp2N 个单点修改。经过分析,总共的修改量是 Θ ( N 2 − 2 / c log ⁡ N ) \Theta(\frac{N^{2-2/c}}{\log N}) Θ(logNN22/c) 的。

考虑证明当常数 r > 1 r > 1 r>1 时有 ∑ p ∈ P ∧ p > x 1 p r = Θ ( 1 x r − 1 log ⁡ x ) \sum_{p\in \mathbb P \wedge p>x} \frac 1{p^r} = \Theta \left( \frac 1{x^{r-1}\log x} \right) pPp>xpr1=Θ(xr1logx1)
这里仅提供一个不严谨的证明,基于一个将素数看作以 1 log ⁡ x \frac 1{\log x} logx1 的密度分布的数。
由此我们断言该和式与 ∑ p > x 1 p r log ⁡ p \sum_{p>x} \frac 1{p^r \log p} p>xprlogp1 同阶。由于 log ⁡ p > log ⁡ x \log p > \log x logp>logx,可以得到上界 O ( 1 log ⁡ x ⋅ ∑ p > x 1 p r ) = O ( 1 x r − 1 log ⁡ x ) \mathcal O(\frac 1{\log x} \cdot \sum_{p>x} \frac 1{p^r}) = \mathcal O(\frac{1}{x^{r-1}\log x}) O(logx1p>xpr1)=O(xr1logx1)。考虑仅求和到 2 x 2x 2x 并且令 1 log ⁡ p ≤ 1 log ⁡ 2 x \frac 1{\log p} \le \frac 1{\log 2x} logp1log2x1,即可得到下界 Ω ( 1 x r − 1 log ⁡ x ) \Omega(\frac 1{x^{r-1}\log x}) Ω(xr1logx1)
综上,我们大致说明了这个界是紧的。

我们使用一个 Θ ( k ) \Theta (k) Θ(k) 修改 - Θ ( k n 1 / k ) \Theta(kn^{1/k}) Θ(kn1/k) 询问的 k k k 层级结构,那么复杂度就是

Θ ( k N 2 − 2 / c log ⁡ N + Q ( N 1 / c log ⁡ N + k n 1 / k ) ) \Theta \left(k\frac{N^{2-2/c}}{\log N} + Q \left(\frac{N^{1/c}}{\log N} + kn^{1/k}\right)\right) Θ(klogNN22/c+Q(logNN1/c+kn1/k))

N , Q N,Q N,Q 同阶时,我们可直接取 c = 3 , k = 4 c=3,k=4 c=3,k=4 即达到最优复杂度。

三阶判别式

三阶判别式的原理不难解释,但是如果直接对上述方法照猫画虎到三维数点,会引发一个复杂度上的问题。经过计算发现,这样的点数有 Θ ( N 3 − 5 c log ⁡ N ) \Theta(\frac{N^{3-\frac 5c}}{\log N}) Θ(logNN3c5),即使是 c = 3 + ϵ c=3+\epsilon c=3+ϵ 的情况也没有优化同阶时候的复杂度,事实上接下来我们可能不太好继续优化同阶时候的复杂度了,但是现在我们能够将 c c c 可用范围扩展,使得处理 N , Q N,Q N,Q 不平衡的情况能够处理。由于我们要介绍接下来的算法,所以先不讨论如何优化不平衡的三维数点,先记作 O ~ ( N 3 − 5 / c + Q N 1 / c ) \tilde \mathcal O\left( N^{3-5/c} + QN^{1/c} \right) O~(N35/c+QN1/c)

高阶判别式

我们考虑形如 ⌊ x p ⌋ ⌊ x p 2 ⌋ \lfloor \frac xp \rfloor \lfloor \frac x{p^2} \rfloor pxp2x 的数点本质上只是一维数点,且只有 ⌊ x p ⌋ \lfloor \frac x p\rfloor px 个修改。同理,形如 ⌊ x p ⌋ ⌊ y p 2 ⌋ ⌊ x p 3 ⌋ \lfloor \frac xp \rfloor \lfloor \frac y{p^2} \rfloor\lfloor \frac x{p^3}\rfloor pxp2yp3x 的数点实际上也是二维。接下来还剩下一种情况: ⌊ x p ⌋ ⌊ y p 2 ⌋ ⌊ z p 3 ⌋ \lfloor \frac xp \rfloor \lfloor \frac y{p^2} \rfloor\lfloor \frac z{p^3}\rfloor pxp2yp3z,但我们发现根据询问的性质,要么有 z = x + y z=x+y z=x+y,要么有 z = ∣ x − y ∣ z=|x-y| z=xy。因为 ⌊ x p 3 ⌋ , ⌊ y p 3 ⌋ \lfloor \frac x{p^3} \rfloor,\lfloor \frac y{p^3} \rfloor p3x,p3y 实已确定,那么 ⌊ z p 3 ⌋ \lfloor \frac z{p^3} \rfloor p3z 要么是定值,要么被斜率为 ± 1 \pm 1 ±1 的一条直线切成两部分,而我们知道,三角形也是可以转化为二维数点的。因此,我们完全同理地将三阶判别式转化成了复杂度:

Θ ( k N 2 − 2 / c log ⁡ N + Q ( N 1 / c log ⁡ N + k n 1 / k ) ) , 1 < c ≤ 4 \Theta \left(k\frac{N^{2-2/c}}{\log N} + Q \left(\frac{N^{1/c}}{\log N} + kn^{1/k}\right)\right), \quad 1<c\le 4 Θ(klogNN22/c+Q(logNN1/c+kn1/k)),1<c4

对于更高阶的判别式,我们总是可以在确定了 x , y , z x,y,z x,y,z 的出现的第一个 p k p^k pk 位置的情况下,在 poly ⁡ c \operatorname{poly} c polyc 的时间内 DP 出其他拆括号位置的系数。但是注意到我们需要枚举所有的 χ p , i \chi_{p,i} χp,i 其中的 i i i 构成的子集,所以复杂度是

Θ ( k N 2 − 2 / c log ⁡ N + Q ( N 1 / c log ⁡ N + k n 1 / k ) ) ⋅ O ~ ( 2 c ) \Theta \left(k\frac{N^{2-2/c}}{\log N} + Q \left(\frac{N^{1/c}}{\log N} + kn^{1/k}\right)\right) \cdot \tilde \mathcal O(2^c) Θ(klogNN22/c+Q(logNN1/c+kn1/k))O~(2c)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值