不要把技能树点歪了。
math-数学前置
复数
\(x+yi\) 的数称为复数,其中 \(i = \sqrt{-1}\)。
一般把复数放到复平面上,那么复数 \(x+yi\) 就可以看做一个平面向量 \(\large{x \brack y}\),用两个 double 存一下就好了。
乘法运算法则:\((x+yi)(x'+y'i)=(xx'-yy')+(xy'+x'y)i\)
单位根
\(n\) 次单位根:就是把复平面上单位圆 \(n\) 等分(从 \((1,0)\) 开始),从圆心到这些点构成的向量中幅角为正且最小的向量对应的复数。
- 单位根公式,证明看图就行:
-
推论 1:\(\omega_{n}^{1}=\omega_n^n=1\)。
-
推论 2:若 \(k < \frac{n}{2}, 2 | n\),则有 \(\omega_{n}^{k}=-\omega_{n}^{k+\frac{n}{2}}\)。
证明:本质等价于向量旋转 180 度。
- 推论三:\(\omega_{n}^{k}=\omega_{2n}^{2k}\)。
poly-多项式
明确:FFT, NTT 本质都是把多项式在点值表示法和系数表示法之间转化,也就是快速求出多项式在一些点(横坐标是单位根的点)上的取值。
FFT
为了方便,若输入多项式不是 \(2^k\) 项,在后面补 \(0\) 使其变为 \(2^k\) 项。
对于 \(n-1=2^k-1\) 次多项式 \(A(x) = a_0 + a_1x+a_2x^2 + \dots + a_{n-1}x^{n-1}\),首先对下标奇偶分类:
不难观察到:
现在,如果我们取 \(n\) 次单位根作为这个 \(n-1\) 次多项式点值表达式的 \(n\) 个关键点的横坐标带入,会有奇妙的事情发生。