多項式學習計畫

2022-10-11 13:36:10 字數 1338 閱讀 9797

寫給自己看的。將學習時難以理解的點寫了寫。

dft預設高位補零後 \(n=2^s\)。

考慮將多項式 \(f(x)=\sum\limits_^a_ix^i\) 轉換為點值表示法。

顯然需要計算 \(n\) 個單位根處的值,一一計算複雜度仍為 \(o(n^2)\)。通過代入 \(n\) 次單位根以加速計算。

令\[g(x)=a_0+a_2x+…+a_x^,h(x)=a_1+a_3x+…+a_x^

\]則有 \(f(x)=g(x^2)+xh(x^2)\)。代入單位根就變成了

\[f(\omega_n^k)=g(\omega_n^)+\omega_n^kh(\omega_n^)

\]由單位根的性質又有

\[f(\omega_n^)=g(\omega_n^)+\omega_n^h(\omega_n^)

\]這意味著我們可以分治解決問題,並且每次只計算序列的前一半。複雜度 \(t(n)=o(n)+2t(\frac)=o(n\log n)\)。選取單位根的意義就在於每次可以只算前一半,不然複雜度仍為 \(t(n)=o(n)+4t(\frac)=o(n^2)\)

idft

不會推導。這把記個結論:\(n\) 次單位根的範德蒙德矩陣的逆矩陣相當於原矩陣中每一項取倒數再除以 \(n\)。於是把代入時取的 \(\omega_n^k\) 換成 \(\omega_n^\) 最後再除一下 \(n\) 即可。

fft 精度太差,很多題目中還要取模,於是就用 ntt。

咋判定:如果模數 \(p=q2^s+1\),而且 \(2^s\) 超過了題目中 \(n\) 能取到的最大值,那麼就可以 ntt。當然,\(p\) 得是個質數。

考慮用模 \(p\) 的原根 \(g\)。由於 \(g^0,g^1,…,g^\) 互不相同,因此可以嘗試拿 \(g\) 去充當模意義下的單位根。但是此時一共有 \(p-1\) 中不同的取值,不是 \(n\) 次單位根。因此我們取 \(g^}\) 為本原單位根就完事了。一般有 \(g=3\)。

求 \(f^\pmod \)。

考慮倍增。假設我們已經算出來了 \(f\) 模 \(x^\) 意義下的乘法逆 \(g\),那麼就有

\[f^\equiv g\pmod }\\

f^-g\equiv 0\pmod }\\

(f^-g)^2\equiv 0\pmod \\

f^-2f^g+g^2\equiv 0\pmod \\

f^\equiv2g-g^2f\equiv g(2-gf)\pmod

\]複雜度 \(t(n)=t(n/2)+o(n\log n)=o(n\log n)\)。

求 \(g\) 使得 \(g^2\equiv f\pmod }\)。

學習筆記 多項式

給你n個點 x 1,y 1 x 2,y 2 求乙個n 1次的多項式 f x 求 f k 我們可以認為 f x f 1 x f 2 x f x 其中 f i x i y i 且 forall j neq i,f i x j 0 也就是說乙個點 x i 只在乙個函式中為 y i 其他函式中均為0 換言之...

學習筆記 多項式

把一直學不懂的各種大常數 o n log n 的神奇多項式演算法總結一下 證明什麼的比較簡略 還有我今天才知道預處理一下單位根會快很多 qwq 最沒用的乙個 首先我們能寫出乙個 o n 2 的暴力 這個你都不會就可以退役了 某位dalao題解中的 要確定乙個多項式,我們發現只要代 f 1 f 2 f...

多項式學習筆記

太菜了並不是很理解多項式,簡單記錄一下,緩慢更新吧 有問題問快速航 首先我們要求的柿子長這樣 c k sum a i b j 大概思路 先把兩個多項式轉成點值 dft 再把兩個多項式的點值乘在一起,把新的點值轉成多項式 idft 即可 首先要了解複數的運算 a b i c d i a c b d i...