除法&取模
設 $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(\frac)+x^x^r(\frac)$$
對於 $n$ 次多項式 $a(x)$ , $x^na(\frac)$ 代表的是多項式係數對稱交換,設其為 $a(x)$,則$$f(x)=g(x)q(x)+x^r(x)$$
由於 $q(x)$ 是 $n-m$ 次多項式,於是式子滿足$$f(x)\equiv g(x)q(x) \pmod}$$
於是$$q(x)\equiv \frac \pmod}$$
多項式求逆即可
於是我們可以求出 $q(x)$ ,根據定義求出 $r(x)$ 即可
**
#include usingnamespace
std;
const
int n=6e5+5,p=998244353
;int n,m,f[n],g[n],g[2]=,a[n],b[n],t,p,re[n],d[n],q[n];
int x(int x)
int k(int x,int
y)void put(int *a,int
l)void pre(int
l)void ntt(int *a,int
o)
if(o)
for (int i=0,v=k(t,p-2);i)
a[i]=1ll*a[i]*v%p;
}void inv(int *a,int *b,int
l) inv(a,b,(l+1)>>1
);
for (int i=0;i)
a[i]=a[i],b[i]=b[i];
pre(l
<<1);ntt(a,0);ntt(b,0
);
for (int i=0;i)
a[i]=1ll*a[i]*b[i]%p*b[i]%p;
ntt(a,1);
for (int i=0;i)
b[i]=x(x(b[i]<<1)+p-a[i]);
for (int i=0;i0;}
void dvs(int *f,int *g,int *q,int *d)
intmain()
Re 多項式除法 取模
emmm又是暫無 多項式求逆 還是跟之前一樣顧名思義 給定乙個多項式f x 請求出多項式q x 和r x 滿足f x q x g x r x r項數小於g,係數對998244353取模。先考慮乙個多項式的反轉操作 就是乙個多項式係數前後調換 定義這個反轉的操作下標加個 r 顯然fr x xnf 1 ...
多項式取模 模板
最近想寫一下多項式取模的模板,然而找不到模板題。於是上網找了個高精度除法題,寫完之後才發現高精度除法和多項式取模是不一樣的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...