浅谈单位根反演

发布时间 2023-09-07 15:33:51作者: Xun_Xiaoyao

我感觉这东西还蛮有意思的。

基础结论

我们首先给出一个结论:\(\sum\limits_{i=0}^{n-1}\omega_n^{ij}=n[n|j]\),其中 \(\omega_n\) 表示 \(n\) 次单位根,具体的,它等于 \(e^{\frac{2i\pi}{n}}\)

下面给出证明:

\(f(x)=\sum\limits_{i=0}^{n-1}x^i\),上式就等价于 \(f(\omega_n^j)=[n|j]\)

  • \(\omega_n^i=1\),即 \(n|j\) 时,原式 \(=\sum\limits_{i=0}^{n-1}1=n\)
  • \(\omega_n^i\ne 1\),即 \(n\nmid j\) 时,\(f(x)=\dfrac{x^n-1}{x-1}\),有因为 \((\omega_n^i)^n=1\),所以原式 \(=0\)

这个式子的一般情况只能处理 \(j\bmod n=0\) 的情况,考虑拓展成 \(j\bmod n=a\) 的情况。

\(n[j\bmod n=a]=n[(j-a)\bmod n=0]=\sum\limits_{i=0}^{n-1}\omega_n^{i(j-a)}=\sum\limits_{i=0}^{n-1}\omega_n^{ij}\omega_n^{-ia}\)

这样我们就可以得到拓展,记多项式 \(F(x)=\sum\limits_{i=0}^ma_ix^i\)

\(\sum\limits_{i=0}^ma_i[i\bmod n=k]=\dfrac{1}{n}\sum\limits_{i=0}^ma_i\sum\limits_{j=0}^{n-1}\omega_n^{ij}\omega_n^{-jk}=\dfrac{1}{n}\sum\limits_{j=0}^{n-1}\omega_n^{-jk}\sum\limits_{i=0}^ma_i\omega_n^{ij}=\dfrac{1}{n}\sum\limits_{j=0}^{n-1}\omega_n^{-jk}F(\omega_n^j)\)

这样,我们就得到了快速求出 \(F(x)\) 所有满足 \(i\bmod n=k\)\(a_i\) 的系数和。

CTT 2019 D2T1 循环序列

可以将题意转化为 \(ans=\sum\limits_{i=0}\binom{k}{ni+x}\bmod p\),保证 \(n|p-1\)

不难得到:\(ans=[t^x]\left[(1+t)^k\bmod t^n\right]\)。记 \(f(t)=(1+t)^k\),所以最终答案为 \(\sum\limits_{i=0}^{n-1}\omega_n^{-ix}f(\omega_n^i)\)

复杂度为 \(O(n\log n)\)

快速求值

有的时候暴力数其实并不够,有时候我们需要更快速的求值方式。

IDFT

学过 FFT 和 NTT 的式子,可以发现 IDFT 有着和单位根一致的结构,其实 IDFT 就是使用单位根反演来证明正确性的。

\(f_i=\sum\limits_{j=0}^{n-1}\mathcal{F}_j\omega^{-ij}\),所以我们可以使用 IDFT 的过程来做到 \(O(n\log n)\) 求解,复杂度 \(O(n\log n)\),但仅限于 \(n=2^w\) 的情况。

而对于 \(n\neq 2^w\) 的情况,我们就需要考虑其他的求解方式了。

Chirp Z-Transform

我们记 \(F(x)=\sum\limits_{i=0}^{n-1}\mathcal{F}_ix^i\),则我们最终要求的就是 \(F(x)\)\(n\) 个点值:\(F(\omega_n^i),i=0,1\dots n-1\)

而这个过程,就是 Chirp Z-Transform 所求解的形式。

针对单位根繁衍的情况,我们可以可以得到:

\(f_i=\sum\limits_{j=0}^{n-1}\mathcal{F}_j\omega^{-ij}=f_i=\sum\limits_{j=0}^{n-1}\mathcal{F}_j\omega^{\binom{i}{2}+\binom{j}{2}-\binom{i+j}{2}}\)

所以 \(f_i=\omega_n^{\binom{i}{2}}\sum\limits_{j=0}^{n-1}\mathcal{F}_j\omega_n^{\binom{j}{2}}\times \omega_n^{-\binom{i+j}{2}}\),这个是差卷积的形式,直接卷积即可,复杂度 \(O(n\log n)\)

例题

Luogu P5591 小猪佩奇学数学

给定 \(n,p,k\),求 \(\sum\limits_{i=0}^n\dbinom{n}{i}p^i\left\lfloor\dfrac{i}{k}\right\rfloor\bmod 998244353\),保证 \(\exists w\in \mathbb{N}\cap[0,20],k=2^w\)

先推式子:

\[\begin{matrix} \sum\limits_{i=0}^n\dbinom{n}{i}p^i\left\lfloor\dfrac{i}{k}\right\rfloor\\ =\sum\limits_{i=0}^n\dbinom{n}{i}p^i\dfrac{i-(i\mod k)}{k}\\ =\sum\limits_{i=0}^n\dbinom{n}{i}p^ii-\sum\limits_{i=0}^n\dbinom{n}{i}p^i\dfrac{i\mod k}{k}\\ =\sum\limits_{i=0}^n\dbinom{n}{i}p^ii-\sum\limits_{j=0}^{k-1}j\sum\limits_{i=0}^n\dbinom{n}{i}p^i[i\mod k=j] \end{matrix} \]

先考虑前者,我们知道 \((1+x)^n=\sum\limits_{i=0}^n\binom{n}{i}x^i\),而 \([(1+x)^n]'=\sum\limits_{i=0}^n\binom{n}{i}(x^i)'\),即 \(n(1+x)^{n-1}=\sum\limits_{i=0}^n\binom{n}{i}ix^{i-1}\)

所以 \(\sum\limits_{i=0}^n\dbinom{n}{i}p^ii=np(1+p)^{n-1}\)

再考虑后者,很明显是单位根反演的形式,记 \(f(x)=(1+px)^n\),则可知 \(\sum\limits_{i=0}^n\dbinom{n}{i}p^i[i\mod k=j]=\dfrac{1}{k}\sum\limits_{i=0}^{k-1}f(\omega_k^i)\),由于 \(k=2^w\),可以直接使用 IDFT 的过程。

复杂度 \(O(k(\log k+\log n))\)

[HNOI2019] 白兔之舞

首先考虑使用占位符 \(x\) 表示长度,记 \(F_{i,j}(x)\) 表示走到 \((i,j)\) 的方案数的生成函数,\(S_{i,j}(x)\) 表示对于 \(F_{i,j}(x)\) \(i\) 维的前缀和。
\(S_{L,y}(x)=\sum\limits_{i=1}^La_ix^i\),则我们最终需要的就是 \(\sum\limits_{i=1}^La_i[i\mod k=j],j=0,1\dots k-1\)

也就是要求解 \(\sum\limits_{i=0}^{k-1}S_{L,y}(\omega_k^i)\omega_k^{-ij},j=0,1\dots k-1\)

首先考虑如何求出 \(S_{L,y}(\omega_k^i),i=0,1\dots k-1\)

我们知道 \(F_{i,j}(x)=\sum\limits_{k=1}^nv_{k,j}xS_{i-1,k}(x)\)\(S_{i,j}=S_{i-1,j}+F_{i,j}=S_{i-1,j}+\sum\limits_{k=1}^nv_{k,j}xS_{i-1,k}(x)\)
初始状态为 \(S_{0,i}(x)=[i=x]\)
由此,\(S_{i,j}=S_{i-1,j}+F_{i,j}=S_{i-1,j}+\sum\limits_{k=1}^nv_{k,j}xS_{i-1,k}(x)\),是可以使用矩阵快速幂的。

然后使用 Chirp Z-Transform 求解后半部分即可,由于是给定模数,所以要使用 MTT。

通过代码