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 哈希杀手 的最后一步 .
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/17066511.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ