2023.1.24 闲话

同态计数 加强版

\(\mathbb F_p^k\) 中选取 \(n\) 个线性无关向量的方案数,答案对 \(998244353\) 取模 .

最多 \(10\) 组询问,\(1\le n<2^{31}\)\(1\le b,k<998244353\) .

joke 不知道为啥就让我造数据,于是我就造了 5 组 .

根据经典结论可知答案就是

\[\prod_{i=0}^{n-1}(p^k-p^i) \]

对连乘分块,令块长为 \(B\)\(\displaystyle g(x)=\prod_{i=0}^{B-1}(p^k-x\cdot p^i)\),则有

\[\prod_{i=0}^{\lfloor\frac nB\rfloor-1}g(p^{iB})\cdot\prod_{i=\lfloor\frac nB\rfloor B}^{n-1}(p^k-p^i) \]

于是如果能求出 \(g\) 的各项系数,则前面用 CZT,后面暴力即可,由于某些问题直接让 \(B=\Theta(\sqrt n)\),则时间复杂度是 \(\Theta(\sqrt n\log n)\) .

\(g\) 可以分治 NTT 做到 \(\Theta(\sqrt n\log^2n)\) 求各项系数,实际上跑得还是很快的,和 \(\Theta(\sqrt n\log n)\) 差不多快 .

joke3579 说可以用付公主的背包的法做到 \(\Theta(\sqrt n\log n)\),具体就是

\[\begin{aligned}\prod_{i=0}^B(1-xp^{i-k})&=\exp\sum_{i=0}^B\ln(1-xp^{i-k})\\&=\exp\sum_{i=0}^B\sum_{j\ge 1}\dfrac{(p^{i-k}x)^j}j\\&=\exp-\sum_{j\ge 1}\dfrac{x^j}{j!}\sum_{i=0}^B(p^j)^{i-k}\end{aligned} \]

可以 \(\Theta(B)\) 算系数,然后 \(\Theta(B\log B)\) exp 即可 .

upd. 对比 \(g(x)\)\(g(px)\) 的系数即可 \(\Theta(B)\) .

问题即为 ULR #2 哈希杀手 的最后一步 .

posted @ 2023-01-24 22:58  Jijidawang  阅读(83)  评论(0编辑  收藏  举报
😅​