多項式求逆是多項式除法的基礎,如果你不會多項式求逆,請看這裡
問題:已知兩個多項式$f(x)$(次數為n),$g(x)$(次數為m),求兩個多項式$q(x)$與$r(x)$,滿足$f(x)=g(x)q(x)+r(x)$,所有運算在模998244353意義下進行
推一發式子:
$f(x)=g(x)q(x)+r(x)$
用$\frac$替代$x$,得到:
$f(\frac)=g(\frac)q(\frac)+r(\frac)$
兩邊乘乙個$x^$,得:
$x^f(\frac)=x^g(\frac)x^q(\frac)+x^r(\frac)$
對表示式$f(x)=g(x)q(x)+r(x)$進行分析,可以看到,若$f(x)$次數為n,$g(x)$次數為m,則$q(x)$次數為$n-m$,$r(x)$次數不超過m-1
那麼對自變數先取逆再乘乙個最高次數等價於構造乙個係數與原多項式恰好相反的多項式!
也即若$f(x)=\sum_^a_x^$,則$x^f(\frac)=\sum_^a_x^$
我們記$x^f(\frac)=\sum_^a_x^=f^(x)$
那麼上式可以簡寫成$f^(x)=g^(x)q^(x)+r^(x)$
可以發現,$r^(x)$這個多項式前$(n-m+1)$項的係數均為0!
因此如果我們在$mod$ $x^$意義下,可以立刻得出這個等式:
$f^(x)\equiv g^(x)q^(x)$($mod$ $x^$)
那麼移項即得:
$q^(x)\equiv \frac(x)}(x)}$($mod$ $x^$)
這樣就求出了$q(x)$,然後基於原表示式,可得:
$r(x)=f(x)-g(x)q(x)$
$r(x)$就算出來了
#include #include#include
#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
const ll mode=998244353
;int to[(1
<<20)+5
];int
n,m;
ll ff[
100005],gg[100005],f[100005],g[100005],q[100005],gf[100005
];struct
node
las,now;
ll pow_mul(ll x,ll y)
return
ret;
}void ntt(ll *a,int len,int
k) }
}if(k==-1
)
}ll a[(
1<<20)+5],b[(1
<<20)+5],c[(1
<<20)+5
];void solve(int
dep)
int nxt=(dep+1)/2
; solve(nxt);
int lim=1,l=0
;
while(lim<=2*dep)lim<<=1,l++;
for(int i=0;i>1]>>1)|((i&1)<<(l-1
)));
for(int i=0;i0
;
for(int i=0;ig[i];
for(int i=0;ilas.g[i];
ntt(a,lim,
1),ntt(b,lim,1
);
for(int i=0;imode;
ntt(c,lim,-1
); now.len=dep;
for(int i=0;i2*las.g[i]-c[i])%mode+mode)%mode;
las=now;
}void mul(ll *a,ll *b,int
len)
intmain()
多項式除法
給一n次多項式f x m次多項式g x 求一多項式q x r x 滿足 令f r x 表示函式f x 係數翻轉後的函式 because f x a 0x n a 1x a n therefore f r x a nx n a x a 0 x n a n a frac a 0 frac x nf fr...
python定義多項式除法 多項式長除法
我被困在乙個問題上,儘管如此,我還是找不到比較是怎麼出錯的。我試著做多項式長除模2。在while len bincrcgen len binpayload and binpayload if binpayload 0 bincrcgen 0 del binpayload 0 for j in ran...
多項式除法 取模
除法 取模 設 n 次多項式 f x 和 m 次多項式 g x 求 n m 次多項式 q x 和 m 1 次多項式 r x 滿足 f x g x q x r x 於是我們有 f frac g frac q frac r frac 兩遍同乘 x n x nf frac x mg frac x q fr...