正题
NTT
假设给出两个多项式,求他们的傅里叶卷积是及其简单的。
但是如果这两个多项式的值域为P,那么在运算的过程中,某一位的最大值是

,因为FFT本身自带一个limit。
所以当

的时候,

,很明显会爆long double.
通常这类问题他还会教你mod一个质数。 怎么做?
首先考虑FFT中的

替换成q,可以使得

。
考虑模mod意义下原根a,因为原根a的阶

。
所以不存在一个

,使得

。
q就显然等于

。因为只有这样,才能使得它有上面那个性质,而且和

的性质相似。
当做idft的时候,就使

就可以了。
所以这个质数要拥有的性质是

,而且这个q要尽量大,至少

。
MTT
那么当这个不是一个质数,或者没有NTT模数的性质呢?
考虑我们是因为什么才使用NTT的?没错,是因为它的乘积太大了。
FFT怎么避免这种问题?
拆分FFT(MTT)
我们对第一个多项式的每一项拆成

的形式,对于第二多项式的每一项拆成

的形式。
所以:

。
我们做四次多项式乘法然后合并就可以了。可以知道,现在FFT过程中的最大值可能超过

,所以采用long double进行存储就可以了,对某些数据比较水的直接double即可。
多项式求逆
再讲一下多项式求逆。
就是已知一个多项式P,要找到一个G,使得

。

的意思就是把第n位和后面砍掉。
使得这两个多项式相乘mod一个数之后,砍掉第n位以后的数位只有常数项剩下一个1.
假设我们已知

。
明显

那么根据多项式的分配律,我们知道

。
接着,因为P不为0,所以

所以,我们知道

的第0项到第

项,都为0.
两边同时平方,就可以得到

因为平方之后的

项,必定为0。考虑第i项从

转移过来,就可以知道转移到

项的二元组必定有一个位置

,证毕。
展开之后,乘上F可以得到

。
又因为

可以得到

。
移项就可以得到

。

用FFT,MTT,或者NTT求就可以了。
是不是加强版都是这样。
现在我们只需要递归就可以了,直到

的时候,直接令
![G[0]=F[0]^{-1}](data/attach/1904/z0kmy8rsolttu8v9va5cp9kzigkc93kt.jpg)
就可以了。
那么,什么情况下一个多项式一定有逆呢?
1.首先当P的第一位肯定不为0,用因为第0项只能由两个第0项转移过来,相乘之后肯定为0,而不为1.
2.P的第0项一定与模数互质,要么常数项的逆元都没法求。
3.其他的随意。