多項式除法 取模

2022-09-01 04:36:10 字數 1327 閱讀 9150

除法&取模

設 $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 using

namespace

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...