任意模数多项式乘法-多模数快速数论变换

本文作者为 JustinRochester。

目录地址

上一篇

下一篇


任意模数多项式乘法-多模数快速数论变换

中国剩余定理

考虑一组同余式
\(\begin{cases} \begin{aligned} x&\equiv& a_1&\pmod {m_1}\\ x&\equiv& a_2&\pmod {m_2}\\ \vdots\\ x&\equiv& a_n&\pmod {m_n}\\ \end{aligned} \end{cases}\) 其中,\(\forall i\neq j\to \gcd(m_i, m_j)=1\)

中国剩余定理(Chinese Remainder Theorem,CRT)用于求最小满足条件自然数的 \(x\)

由于任意两个模数之间都互质,我们参考 拉格朗日插值 的思想,看看是否能够构造:

方便起见,我们记 \(\displaystyle M=\prod_{i=1}^n m_i, M_i={M\over m_i}\)

则根据 \(\gcd\) 的积性性质,有 \(\displaystyle \gcd(M_i, m_i)=\gcd(\prod_{j\neq i}m_j, m_i)=\prod_{j\neq i}\gcd(m_j, m_i)=\prod_{j\neq i}1=1\)

因此,我们可以通过快速幂+欧拉定理,或拓展欧几里得算法,求出 \(M_i\) 在模 \(m_i\) 意义下的逆元 \(I_i(I_i<m)\)

于是,我们得到了一个很有意思的系数 \(\displaystyle C_i=M_i\cdot I_i=I_i\cdot \prod_{j\neq i}m_j\) 。它有
\(\begin{cases} \begin{aligned} C_i&\equiv&I_i\cdot \prod_{j\neq i\wedge j\neq k}m_j\cdot m_k&\equiv&I_i\cdot \prod_{j\neq i\wedge j\neq k}m_j\cdot 0&\equiv &0&\pmod{m_k}&(k\neq i)\\ C_i&\equiv&I_i\cdot M_i&\equiv& M_i^{-1}\cdot M_i&\equiv&1&\pmod{m_k}&(k=i)\\ \end{aligned} \end{cases}\)

于是,类似拉格朗日插值构造基多项式的思想,我们构造出了“基系数” \(C_i\)

所以,根据拉格朗日插值的同样思想,我们可以直接写出 \(\displaystyle x^*=\sum_{i=1}^n a_iC_i\) 。但这一定是最小的吗?

我们不妨假设 \(x=x^*+k\cdot \text{lcm}(m_1, m_2, \cdots, m_n)=x^*+k\cdot M\) ,则 \(x\equiv x^*+k\cdot M\equiv x^*\equiv a_i\pmod{m_i}\) 同样成立。

因此,实际上,所有的解为 \(x^*+k\cdot M, k\in Z\) ,故最小自然数解为 \(x^*\bmod M\)


多模数快速数论变换

参考上文,我们有了一个还原多项式数值的方法:

挑选多个多项式模数 \(P_1, P_2, \cdots, P_k\) ,分别进行 \(k\) 次多项式计算后,再通过 CRT 进行合并,即可还原出一个不超过 \(\displaystyle P=\prod_{i=1}^k P_i\) 的数值。

因此,根据前一篇的结论,我们只需要选择足够多的多项式模数(每个的 \(2\) 因子乘积均需要超过长度),分别进行多项式计算后,再进行还原。

当我们进行 \(m\) 个多项式乘积时,我们仅需要满足 \(P\geq M^m\cdot n^{m-1}\) 即可还原;

同理,当只进行 \(2\) 个多项式乘积时,我们仅需要满足 \(P\geq M^2\cdot n\) 即可还原。

一个比较好的取值是:\(P_1=998244353=119\times 2^{23}+1, P_2=1004535809=479\times 2^{21}+1, P_3=469762049=7\times 2^{26}+1\) ,这三个数的乘积为 \(471064322751194440790966273\approx 4.7\times 10^{26}\),且原根均为 \(3\)

根据前一篇分析,两个多项式在模数为 int 的情况下,乘法的数值范围只会达到 \(4\times 10^{24}\),远小于该乘积的范围。

因此,用该数值可以很好的进行多项式的任意模数乘法了。

posted @ 2023-02-22 15:34  JustinRochester  阅读(89)  评论(0编辑  收藏  举报