比FFT還容易明白的NTT(快速數論變換)
阿新 • • 發佈:2019-01-08
相關
一種快速數論變換演算法,這種演算法是以數論為基礎,對樣本點為的數論變換,按時間抽取的方法,得到一組等價的迭代方程,有效高速簡化了方程中的計算公式·與直接計算相比,大大減少了運算次數。(見快速傅立葉變換)。
在計算機實現多項式乘法中,我們所熟知的快速傅立葉變換(FFT)是基於n次單位根 (omega) 的優秀性質實現的,而由於其計算時會使用正弦函式和餘弦函式,在不斷運算時無法避免地會產生精度誤差。而多項式乘法有些時候會建立在模域中,在對一些特殊的大質數取模時,便可以考慮用原根g來代替 ,而這些特殊的大質數的原根恰好滿足 的某些性質,這使得多項式乘法在模域中也可以快速的分治合併。
——百度百科
NTT(Number Theoretic Transform),中文名快速數論變換
和一樣,也用來加速多項式乘法,不過最大的優點是可以取模
或者可以理解為是取模升級版
- 看這篇之前確保你已經會了→奶一口本人部落格
- 好像比起來難的知識點更少了emm
的優缺點
優點
能取模,複數你給我取個模……?
沒有精度差,浮點數精度怎麼也會出點問題
由於均為整數操作(雖然取模多),
(其實這是放屁)
小資料下表現良好……
缺點
多項式的係數都必須是整數
模數有限制而且題目的模數通常都是相同的
前置知識&技能
原根
對於,如果的值互不相同,則稱為的原根
或者說,那麼為的原根
原根沒什麼快速求法,只能暴力列舉判斷
通常模數常見的有,這幾個的原根都是
就這麼少東西?好像真的只有這麼少
(快速數論變換)
可以優化是因為有著神奇且優秀的性質
呢?其實原根也有這類性質!
在裡,我們可以拿原根來代替的單位根
具體就是,當合並區間的長度為時,單位根為
而原根即為