P4245 【模板】任意模数多项式乘法
P4245 【模板】任意模數(shù)多項(xiàng)式乘法
https://www.luogu.com.cn/blog/AzusaCat/solution-p4245
首先這類問題指的是對于一個非NTT模數(shù),我們?nèi)绾斡?jì)算多項(xiàng)式乘法,對于NTT不容易找到單位根,對于FFT又會爆精度。
方法1:三模數(shù)NTT
尋找三個大模數(shù)最后CRT合并即可
方法2:MTT
將系數(shù)拆分為兩部分,分別是M的倍數(shù)和余數(shù),然后我們只需要對其分別處理即可,但是這樣暴力的做一共需要7次FFT復(fù)雜度太高,我們通過一些數(shù)學(xué)技巧可以優(yōu)化到4次。
首先DFT時可以發(fā)現(xiàn)虛部是空的,我們可以將另一個多項(xiàng)式放在虛部,然后利用共軛求解共軛的值,然后就可以一次求出兩個多項(xiàng)式的點(diǎn)值,所以可以將4次DFT變?yōu)?次。
然后IDFT時,發(fā)現(xiàn)點(diǎn)值最后轉(zhuǎn)化為系數(shù)時虛部也是空的,所以我們可以將兩個多項(xiàng)式加在一起IDFT,可以發(fā)現(xiàn)如果給系數(shù)乘i,那么點(diǎn)值對應(yīng)乘i,所以對應(yīng)的虛部點(diǎn)值不會影響到實(shí)部的系數(shù)。
代碼細(xì)節(jié):
floor是向下取整
ceil是向上取整
強(qiáng)制轉(zhuǎn)換是向0取整
所以我們要四舍五入需要判斷正負(fù),對于負(fù)數(shù)-0.5后取整,對于正數(shù)+0.5后取整。
總結(jié)
以上是生活随笔為你收集整理的P4245 【模板】任意模数多项式乘法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我80斤,怎样才能瘦到60斤呢
- 下一篇: P5488 差分与前缀和(多项式/生成函