mirror of https://github.com/OI-wiki/OI-wiki
refactor: 将 CNTT 并入 NTT (#4916)
Co-authored-by: 24OI-bot <15963390+24OI-bot@users.noreply.github.com>pull/4919/head
parent
a08fad3a68
commit
4567b605fd
|
@ -98,6 +98,7 @@
|
|||
/math/poly/tri-func /math/poly/elementary-func
|
||||
/math/poly/inv-tri-func /math/poly/elementary-func
|
||||
/math/poly/lagrange /math/numerical/lagrange
|
||||
/math/poly/cntt /math/poly/ntt
|
||||
/math/linear-algebra/gauss /math/numerical/gauss
|
||||
/math/integral /math/numerical/integral
|
||||
/math/newton /math/numerical/newton
|
||||
|
|
|
@ -1,75 +0,0 @@
|
|||
author: Saisyc, 383494
|
||||
|
||||
$\mathbf Z_p$ 上的 NTT 常用于替代 FFT 以提高效率,但是严重依赖模数:$p$ 是 $2^mk+1$ 型(如费马质数)时能快速计算,是 $2^mk-1$ 型(如梅森质数)时却难以进行。
|
||||
|
||||
对此,[*Number theoretic transforms to implement fast digital convolution*](https://ieeexplore.ieee.org/document/1451721) 中(section IX, subsection B, P559-560)的快速复数论变换(Complex Number Theoretic Transforms, CNTT)即 $\mathbf Z_p[\mathrm{i}]$ 上的 DFT 能解决,但未被重视。
|
||||
|
||||
对于模 $2^mk-1$ 型质数的卷积问题,CNTT 优于三模数 NTT 和拆系数 FFT。
|
||||
|
||||
## DFT 可逆的条件
|
||||
|
||||
交换环 $R$ 上的 DFT 可逆的充要条件是:存在 $n$ 次本原单位根 $\omega$,且 $\omega^1-1,\omega^2-1,\cdots,\omega^{n-1}-1$ 可逆。
|
||||
|
||||
## 模 $p$ 高斯整数环
|
||||
|
||||
即 $\mathbf Z_p[\mathrm{i}]$。
|
||||
|
||||
为便捷,以下用 $p_-$ 表示 $4k-1$ 型质数,$p_+$ 表示 $4k+1$ 型质数。
|
||||
|
||||
$p_-$ 是高斯整数 $\mathbf Z_p[\mathrm{i}]$ 的素元而 $p_+$ 不是,因此 $\mathbf Z_{p_-}[\mathrm{i}]$ 是域而 $\mathbf Z_{p_+}[\mathrm{i}]$ 上仍可进行 CNTT。
|
||||
|
||||
## 原理
|
||||
|
||||
在 CNTT 中,我们考虑 $\mathbf Z_p[\mathrm{i}]$ 上的 Gauss 整数 $a+b\mathrm{i}\in\mathbf Z_p[\mathrm{i}]$,其中 $p \in \mathbf{P}$($\mathbf{P}$ 为素数集)。
|
||||
|
||||
原论文中假定 $\mathrm{i}^2=-1$,但经笔者手推,这里的 $\mathrm{i}^2$ 不是必须为 $-1$(要求 $4 \mid p-1$),只要满足 $\mathrm{i}^2$ 为模 $p$ 意义下的一个二次非剩余即可:这样 CNTT 的模数也可使用 NTT 模数。
|
||||
|
||||
???+ note "构成数域的证明"
|
||||
由于 $\mathbf Z_p[\mathrm{i}]$ 为 $\mathbf{C}$ 的子集,只要证明其对四则运算封闭。
|
||||
|
||||
加法幺元:$0$
|
||||
|
||||
乘法幺元:$1$
|
||||
|
||||
加法逆元:同 $\mathbf{C}$ 中加法逆元,对 $p$ 取模即可。
|
||||
|
||||
乘法逆元:对 $x = a+b\mathrm{i}$,其中 $a \not= 0 \vee b \not= 0$,设其逆元为 $y=c+d\mathrm{i}$,由 $xy=1$ 可知
|
||||
|
||||
$$
|
||||
\begin{cases}
|
||||
ac+bd\mathrm{i}^2 &= 1 & (1) \\
|
||||
bc+ad &= 0 & (2)
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
当 $b \not= 0$ 时:由 $(2)$ 知 $c = -adb^{-1}$,代入 $(1)$ 中可得 $d = (b\mathrm{i}^2-b^{-1}a^2)^{-1}$。
|
||||
|
||||
若 $b\mathrm{i}^2-b^{-1}a^2 \equiv 0 \pmod p$,则 $\mathrm{i}^2 \equiv (ab^{-1})^2 \pmod p$,这与 $\mathrm{i}^2$ 是模 $p$ 意义下的一个二次非剩余矛盾,所以 $d$ 一定存在。
|
||||
|
||||
当 $a \not= 0$ 时,用相似的方法可以推出 $x^{-1} = y$ 一定存在。
|
||||
|
||||
由于加法和乘法运算封闭,且均存在逆元,因此 $\mathbf Z_p[\mathrm{i}]$ 对四则运算封闭。
|
||||
|
||||
这个数域的大小是 $p^2$,只要用一些方法找出 $g = a+b\mathrm{i},g^{(p^2-1)/2} \equiv -1 \pmod p$,则 $g$ 就是我们要找的 $p^2-1$ 次「原根」,剩下的和 NTT 类似。
|
||||
|
||||
$p=n\cdot2^k+1$ 时($p$ 为 NTT 模数),用 CNTT 可以将最大变换长度翻倍;
|
||||
|
||||
$p=n\cdot2^k-1$ 时,用 CNTT 后最大变换长度同样能取到 NTT 模数级别。
|
||||
|
||||
## 常用模数的单位根
|
||||
|
||||
$\mathrm{i}^2 = -1, n=2^{21}$ 时 $p_-=999292927=2^{20}\times953-1$ 的 $p_-^2-1$ 次单位根 $\omega=1+8\mathrm{i}$;
|
||||
|
||||
$\mathrm{i}^2 = -1, n=2^{23}$ 时 $p_+=998244353=2^{23}\times119+1$ 的 $p_+-1$ 次单位根 $\omega=1+\mathrm{i}$;
|
||||
|
||||
$\mathrm{i}^2 = -1, n=2^{16}$ 时 $p_+=65537=2^{16}+1$ 的 $p_+-1$ 次单位根 $\omega=4+17573\mathrm{i}$;
|
||||
|
||||
$\mathrm{i}^2 = 3, n=2^{31}$ 时 $p_-=2147483647=2^{31}-1$ 的 $p_-^2-1$ 次单位根 $\omega=1+\mathrm{i}$。
|
||||
|
||||
务必注意 $\omega^{-1}\equiv\bar\omega\pmod p$ 不一定成立。
|
||||
|
||||
## 性能和应用
|
||||
|
||||
[洛谷 P3803 评测记录](https://www.luogu.com.cn/record/list?pid=P3803&user=saisyc&page=7) 显示,按照*Optimization of number-theoretic transform in programming contests*实现的 NTT 及与其同构的 CNTT, FFT 进行 $2^{21}\approx2.1\times10^6$ 长度的变换用时分别约为 $44,97,115$ 毫秒。
|
||||
|
||||
对于 $\mathrm{i}^2=3$,模 $998244353$,$2^{24}$ 次单位根为 $0+125038983\mathrm{i}$,无读入优化等优化的 [CNTT](https://www.luogu.com.cn/record/106711483),它的常数是同等条件下 [FFT](https://www.luogu.com.cn/record/106683960) 和 [NTT](https://www.luogu.com.cn/record/106706552) 的 $3$ 倍左右;应用三次变两次优化后,[CNTT](https://www.luogu.com.cn/record/106997466) 常数约等于无优化的 FFT。
|
|
@ -1,4 +1,4 @@
|
|||
author: ChungZH, Yukimaikoriya, tigerruanyifan, isdanni
|
||||
author: ChungZH, Yukimaikoriya, tigerruanyifan, isdanni, Saisyc, 383494, Tiphereth-A
|
||||
|
||||
## 简介
|
||||
|
||||
|
@ -172,6 +172,91 @@ DFT、FFT、NTT、FNTT 的具体关系是:
|
|||
}
|
||||
```
|
||||
|
||||
## 扩展 - 复数论变换(CNTT)
|
||||
|
||||
$\mathbf Z_p$ 上的 NTT 常用于替代 FFT 以提高效率,但是严重依赖模数:$p$ 是 $2^mk+1$ 型(如费马质数)时能快速计算,是 $2^mk-1$ 型(如梅森质数)时却难以进行。
|
||||
|
||||
对此,[*Number theoretic transforms to implement fast digital convolution*](https://ieeexplore.ieee.org/document/1451721) 中(section IX, subsection B, P559-560)的快速复数论变换(Complex Number Theoretic Transforms, CNTT)即 $\mathbf Z_p[\mathrm{i}]$ 上的 DFT 能解决,但未被重视。
|
||||
|
||||
对于模 $2^mk-1$ 型质数的卷积问题,CNTT 优于三模数 NTT 和拆系数 FFT。
|
||||
|
||||
### DFT 可逆的条件
|
||||
|
||||
交换环 $R$ 上的 DFT 可逆的充要条件是:存在 $n$ 次本原单位根 $\omega$,且 $\omega^1-1,\omega^2-1,\cdots,\omega^{n-1}-1$ 可逆。
|
||||
|
||||
### 模 p 高斯整数环
|
||||
|
||||
即 $\mathbf{Z}_p[\mathrm{i}]$,其中 $p \in \mathbf{P}$($\mathbf{P}$ 为素数集)。
|
||||
|
||||
为便捷起见,以下用 $p_-$ 表示 $4k-1$ 型质数,$p_+$ 表示 $4k+1$ 型质数。
|
||||
|
||||
???+ note "定理 1"
|
||||
$\mathbf{Z}_p[\mathrm{i}]$ 构成数域
|
||||
|
||||
??? note "证明"
|
||||
对于 $p_+$,注意到 $\left(\dfrac{-1}{p_+}\right)=1$,故此时的 $\mathbf{Z}_{p_+}[\mathrm{i}]=\mathbf{Z}_{p_+}$. 因此以下假定 $p$ 为 $p_-$.
|
||||
|
||||
由于 $\mathbf Z_p[\mathrm{i}]$ 为 $\mathbf{C}$ 的子集,另外不难发现 $\mathbf Z_p[\mathrm{i}]$ 上有加法幺元 $0$ 和乘法幺元 $1$,故只需证明其对四则运算封闭即可。
|
||||
|
||||
任取 $z_1=a_1+b_1\mathrm{i}\in\mathbf Z_p[\mathrm{i}]$,$z_2=a_2+b_2\mathrm{i}\in\mathbf{Z}_p[\mathrm{i}]$,则不难发现
|
||||
|
||||
- $\overline{z_1},\overline{z_2}\in\mathbf{Z}_p[\mathrm{i}]$
|
||||
- $|z_1|^2\equiv a_1^2+b_1^2\pmod{p}$,$|z_2|^2\equiv a_2^2+b_2^2\pmod{p}$
|
||||
- $\forall k\in\mathbf{Z}_p,~~kz_1\in\mathbf{Z}_p[\mathrm{i}]$
|
||||
|
||||
加法与减法的封闭性:对上述的 $z_1,z_2$,有
|
||||
|
||||
$$
|
||||
z_1\pm z_2=(a_1\pm a_2)+(b_1\pm b_2)\mathrm{i}\in\mathbf{Z}_p[\mathrm{i}]
|
||||
$$
|
||||
|
||||
乘法的封闭性:对上述的 $z_1,z_2$,有
|
||||
|
||||
$$
|
||||
z_1z_2=(a_1a_2-b_1b_2)+(a_1b_2+a_2b_1)\mathrm{i}\in\mathbf{Z}_p[\mathrm{i}]
|
||||
$$
|
||||
|
||||
除法的封闭性:对上述的 $z_1,z_2$($z_2\ne 0$),有
|
||||
|
||||
$$
|
||||
\frac{z_1}{z_2}=(|z_2|^2)^{-1}z_1\overline{z_2}\in\mathbf{Z}_p[\mathrm{i}]
|
||||
$$
|
||||
|
||||
???+ note "定理 2"
|
||||
$\forall k\in\mathbf{Z}_+$,$\mathbf{Z}_p\left[\sqrt{-k^2}\right]=\mathbf{Z}_p\left[\sqrt{-1}\right]=\mathbf{Z}_p[\mathrm{i}]$
|
||||
|
||||
??? note "证明"
|
||||
任取 $z=a+b\sqrt{-k^2}\in\mathbf{Z}_p\left[\sqrt{-k^2}\right]$,则 $z=a+bk\sqrt{-1}\in\mathbf{Z}_p\left[\sqrt{-1}\right]=\mathbf{Z}_p[\mathrm{i}]$
|
||||
|
||||
$p_-$ 是高斯整数 $\mathbf{Z}_p[\mathrm{i}]$ 的素元而 $p_+$ 不是,因此 $\mathbf{Z}_{p_-}[\mathrm{i}]$ 是域而 $\mathbf{Z}_{p_+}[\mathrm{i}]$ 上仍可进行 CNTT。
|
||||
|
||||
- 对于 $p_-$,因为 $\left(\dfrac{x}{p_-}\right)\left(\dfrac{-x}{p_-}\right)=-1,~\forall x\nmid p_-$,故
|
||||
|
||||
$$
|
||||
\forall \left(\frac{x}{p_-}\right)=-1, \exists k\in\mathbf{Z}_{+},~s.t.~-x\equiv k^2\pmod{p_-}
|
||||
$$
|
||||
|
||||
因此由定理 2 可知,$\mathrm{i}^2$ 只需为模 $p_-$ 意义下的一个二次非剩余即可,这样 CNTT 的模数也可使用 NTT 模数。
|
||||
|
||||
$\mathbf{Z}_{p_-}[\mathrm{i}]$ 的大小是 $p_-^2$,只要用一些方法找出 $g = a+b\mathrm{i},g^{(p_-^2-1)/2} \equiv -1 \pmod{p_-}$,则 $g$ 就是我们要找的 $p_-^2-1$ 次「原根」,剩下的和 NTT 类似。用 CNTT 后最大变换长度能取到 NTT 模数级别;
|
||||
|
||||
- 对于 $p_+$,用 CNTT 可以将最大变换长度翻倍。
|
||||
|
||||
### 常用模数的单位根
|
||||
|
||||
- $\mathbf{Z}_{p_-}\left[\sqrt{-1}\right]$,$n=2^{21}$,$p_-=999292927=2^{20}\times953-1$ 的 $p_-^2-1$ 次单位根 $\omega=1+8\mathrm{i}$
|
||||
- $\mathbf{Z}_{p_+}\left[\sqrt{-1}\right]$,$n=2^{23}$,$p_+=998244353=2^{23}\times119+1$ 的 $p_+-1$ 次单位根 $\omega=1+\mathrm{i}$
|
||||
- $\mathbf{Z}_{p_+}\left[\sqrt{-1}\right]$,$n=2^{16}$,$p_+=65537=2^{16}+1$ 的 $p_+-1$ 次单位根 $\omega=4+17573\mathrm{i}$
|
||||
- $\mathbf{Z}_{p_-}\left[\sqrt{3}\right]$,$n=2^{31}$,$p_-=2147483647=2^{31}-1$ 的 $p_-^2-1$ 次单位根 $\omega=1+\sqrt{3}$
|
||||
|
||||
务必注意 $\omega^{-1}\equiv\bar\omega\pmod p$ 不一定成立。
|
||||
|
||||
### 性能和应用
|
||||
|
||||
[洛谷 P3803 评测记录](https://www.luogu.com.cn/record/list?pid=P3803&user=saisyc&page=7) 显示,按照*Optimization of number-theoretic transform in programming contests*实现的 NTT 及与其同构的 CNTT, FFT 进行 $2^{21}\approx2.1\times10^6$ 长度的变换用时分别约为 $44,97,115$ 毫秒。
|
||||
|
||||
对于 $\mathbf{Z}_{998244353}\left[\sqrt{3}\right]$,$998244353$ 的 $2^{24}$ 次单位根为 $0+125038983\sqrt{3}$,无读入优化等优化的 [CNTT](https://www.luogu.com.cn/record/106711483),它的常数是同等条件下 [FFT](https://www.luogu.com.cn/record/106683960) 和 [NTT](https://www.luogu.com.cn/record/106706552) 的 $3$ 倍左右;应用三次变两次优化后,[CNTT](https://www.luogu.com.cn/record/106997466) 常数约等于无优化的 FFT。
|
||||
|
||||
## 参考资料与拓展阅读
|
||||
|
||||
1. [FWT(快速沃尔什变换)零基础详解 qaq(ACM/OI)](https://zhuanlan.zhihu.com/p/41867199)
|
||||
|
|
|
@ -262,7 +262,6 @@ nav:
|
|||
- 代数基本定理: math/poly/fundamental.md
|
||||
- 快速傅里叶变换: math/poly/fft.md
|
||||
- 快速数论变换: math/poly/ntt.md
|
||||
- 快速复数论变换: math/poly/cntt.md
|
||||
- 快速沃尔什变换: math/poly/fwt.md
|
||||
- Chirp Z 变换: math/poly/czt.md
|
||||
- 多项式牛顿迭代: math/poly/newton.md
|
||||
|
|
Loading…
Reference in New Issue