US Open 2020 T2 Exercise

首先根据一番推导,不包含 L L L 的倍数长度的排列长度由

exp ⁡ ( − ∑ k ≥ 1 z k L k L ) 1 1 − x = ( 1 − z L ) 1 / L / ( 1 − z ) \exp (-\sum_{k\ge 1} \frac{z^{kL}}{kL}) \frac1{1-x} = (1-z^L)^{1/L}/(1-z) exp(k1kLzkL)1x1=(1zL)1/L/(1z)

这一 EGF 表示,因此令 k = ⌊ n / L ⌋ k=\lfloor n/L \rfloor k=n/L,可得

[ z k L ] ( 1 − z L ) 1 / L / ( 1 − z ) = [ z k L ] ( 1 − z L ) 1 / L / ( 1 − z L ) = [ z k L ] ( 1 − z L ) 1 / L − 1 = ( − 1 ) k ( 1 / L − 1 k ) = ( 1 − 1 / L ) ( 2 − 1 / L ) ⋯ ( k − 1 / L ) k ! \begin{aligned} [z^{kL}](1-z^L)^{1/L}/(1-z) &= [z^{kL}](1-z^L)^{1/L}/(1-z^L)\\ & = [z^{kL}](1-z^L)^{1/L-1}\\ & = (-1)^k\binom{1/L-1}{k}\\ &= \frac{(1-1/L)(2-1/L)\cdots (k-1/L)}{k!} \end{aligned} [zkL](1zL)1/L/(1z)=[zkL](1zL)1/L/(1zL)=[zkL](1zL)1/L1=(1)k(k1/L1)=k!(11/L)(21/L)(k1/L)

然后因为 EGF 最后要乘以 n ! n! n!,答案 L L L 对应的就是

n ! ( L − 1 ) ( 2 L − 1 ) ⋯ ( k L − 1 ) k ! L k \frac{n!(L-1)(2L-1)\cdots(kL-1)}{k!L^k} k!Lkn!(L1)(2L1)(kL1)

我们欲计算此式并不能太直接,因为是取模 P − 1 P-1 P1,它并不是个质数。

我们考虑将 P − 1 P-1 P1 ≤ n \le n n 部分之质因子分解出,记为 P − 1 = R p 1 α 1 p 2 α 2 ⋯ p w α w P-1 = Rp_1^{\alpha_1}p_2^{\alpha_2}\cdots p_w^{\alpha_w} P1=Rp1α1p2α2pwαw,考虑计算 n ! k ! L k   m o d   ( P − 1 ) \frac{n!}{k!L^k} \bmod (P-1) k!Lkn!mod(P1),它必然是整数。

我们考虑递增地计算所有的 L L L,这时 k k k 是递减的,那么 n ! k ! \frac{n!}{k!} k!n! 我们可以维护其抛去 p 1 , p 2 , … , p w p_1,p_2,\dots,p_w p1,p2,,pw 互质之部分的乘积,以及 p 1 , p 2 , … p w p_1,p_2,\dots p_w p1,p2,pw 各部分的质因子次数。我们对于过程中乘进去的每个数都暴力加入,因为这样的总共次数是
∑ i = 1 w ∑ k = 1 ∞ ⌊ n p i k ⌋ < ∑ p k ≤ n n p k = Θ ( n log ⁡ log ⁡ n ) \sum_{i=1}^w \sum_{k=1}^{\infty} \left\lfloor \frac{n}{p_i^k} \right\rfloor < \sum_{p^k \le n} \frac{n}{p^k} = \Theta(n\log \log n) i=1wk=1pikn<pknpkn=Θ(nloglogn)

对于除以 L k L^k Lk 部分,如果 p p p p i p_i pi 不重合那么就直接 Θ ( k ) \Theta(k) Θ(k) 乘就完事了,并且剩下的部分也没有必要 Θ ( w ) \Theta(w) Θ(w) 计算,我们应该直接存一个乘了所有部分的值,否则就是减去对应的质因子数量,然后进行求值。总共进行 Θ ( w ) \Theta(w) Θ(w) 次求值的只有 ∑ i log ⁡ p i n \sum_i \log_{p_i} n ilogpin 那么多,不是复杂度瓶颈。至于求出 p i t   m o d   P − 1 p_i^t \bmod P-1 pitmodP1 的值,注意到 t ≤ ∑ ⌊ n / p i k ⌋ t\le \sum \lfloor n/p_i^k \rfloor tn/pik,所以我们直接打表的大小是不超过 n log ⁡ log ⁡ n n\log \log n nloglogn 的。

综上所述,结合快速幂部分的复杂度,整道题可以在 Θ ( n log ⁡ log ⁡ n + n log ⁡ n log ⁡ P ) \Theta(n\log \log n + \frac{n}{\log n}\log P) Θ(nloglogn+lognnlogP) 时间内求算。

附录:需要用到的界

Mertens 第二定理告诉我们,
∑ p ≤ n 1 p = ln ⁡ ln ⁡ n + C + O ( 1 ln ⁡ n ) \sum_{p\le n} \frac 1 p = \ln \ln n + C + O\left(\frac1{\ln n}\right) pnp1=lnlnn+C+O(lnn1)

由此我们不难得到所有 p k p^k pk 的倒数和的界:

∑ p k ≤ n 1 p k < ∑ p ≤ n ∑ k ≥ 1 1 p k = ∑ p ≤ n 1 p − 1 = ( ∑ p ≤ n 1 p ) + ( ∑ p ≤ n 1 p ( p − 1 ) ) < ( ∑ p ≤ n 1 p ) + ζ ( 2 ) = ln ⁡ ln ⁡ n + C ′ + O ( 1 ln ⁡ n ) \begin{aligned} &\quad \sum_{p^k\le n} \frac1{p^k}\\ &< \sum_{p\le n} \sum_{k\ge 1} \frac{1}{p^k}\\ & = \sum_{p\le n} \frac{1}{p - 1} \\ & = \left( \sum_{p\le n} \frac 1 p \right) + \left( \sum_{p\le n} \frac 1 {p(p-1)} \right)\\ & < \left( \sum_{p\le n} \frac 1 p \right) + \zeta(2)\\ & = \ln \ln n + C' + O\left(\frac1{\ln n}\right) \end{aligned} pknpk1<pnk1pk1=pnp11=(pnp1)+(pnp(p1)1)<(pnp1)+ζ(2)=lnlnn+C+O(lnn1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值