emmm又是暫無
多項式求逆
還是跟之前一樣顧名思義】
給定乙個多項式f(x),請求出多項式q(x)和r(x),滿足f(x)=q(x)∗g(x)+r(x)
,r項數小於g,係數對998244353取模。
先考慮乙個多項式的反轉操作
就是乙個多項式係數前後調換
定義這個反轉的操作下標加個 r
顯然fr(x)=xnf(1/x)
接著推式子
f(x)=q(x)∗g(x)+r(x)
f(1/x)=q(1/x)∗g(1/x)+r(1/x)
xnf(1/x)=xn-m
q(1/x)∗xm
g(1/x)+xm-1xn-m+1
r(1/x)
fr(x)=qr(x)*gr(x)+xn-m+1rr(x)
所以當fr(x)=qr(x)*gr(x)+xn-m+1rr(x)(mod xn-m+1)
等於fr(x)=qr(x)*gr(x)(mod xn-m+1)
那麼qr(x)=gr(x)*fr(x)-1(mod xn-m+1)
這時求出fr(x)在模xn-m+1即可求出qr(x)
反轉回來就可得q(x)
通過r(x)=f(x)-q(x)∗g(x)
#includeusingnamespace
std;
#define ll long long
#define c getchar()-48inline ll read()
const ll p=998244353,g=3,n=400010
;ll n,m;
ll f[n],g[n],q[n],r[n],inv[n],rev[n],c[n];
ll tmp1[n],tmp2[n];
inline ll ksm(ll a,ll b)
//..快速冪
return
ans;
}inline
void ntt(ll *a,ll n,ll kd)//
ntt日常操作 }}
if(kd==1) return
; ll ny=ksm(n,p-2
); reverse(a+1,a+n);
for(int i=0;ip;
}inline
void cl(ll *a,ll *b,ll n,ll m,ll len,ll w)//
處理 inline
void polyinv(ll *a,ll *b,ll ed)//
遞推版
}inline
void polymul(ll *a,ll *b,ll *c,ll n,ll m)//
計算多項式相乘
inline
void work() //
f=q*g+r ask q,r f,g下標從0--n,0--m
intmain()
posted @
2019-03-07 21:02
1436177712 閱讀(
...)
編輯收藏
多項式除法 取模
除法 取模 設 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...
多項式取模 模板
最近想寫一下多項式取模的模板,然而找不到模板題。於是上網找了個高精度除法題,寫完之後才發現高精度除法和多項式取模是不一樣的qaq。前者要求不能出現負數,為此某些位置可以暫時為0,將餘數拉到後面 而多項式取模則要求最高項一定要剩餘0。於是我把程式隨便改了改,先扔在這兒,以後備忘。我寫的是實數 fft ...
多項式除法
給一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...