refactor: 将 CNTT 并入 NTT (#4916)

Co-authored-by: 24OI-bot <15963390+24OI-bot@users.noreply.github.com>
pull/4919/head
Tifa 2023-05-28 14:03:06 +08:00 committed by GitHub
parent a08fad3a68
commit 4567b605fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 87 additions and 77 deletions

View File

@ -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

View File

@ -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。

View File

@ -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快速沃尔什变换零基础详解 qaqACM/OI](https://zhuanlan.zhihu.com/p/41867199)

View File

@ -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