P4512 模板 多項式除法

2021-10-02 18:49:32 字數 1759 閱讀 1529

題目描述

給定乙個 n 次多項式 f(x) 和乙個 m 次多項式 g(x) ,請求出多項式 q(x), r(x),滿足以下條件:

q(x) 次數為 n−m,r(x) 次數小於 m

f(x) = q(x) * g(x) + r(x)

所有的運算在模 998244353 意義下進行。

輸入格式

第一行兩個整數 n,m,意義如上。

第二行 n+1個整數,從低到高表示 f(x) 的各個係數。

第三行 m+1 個整數,從低到高表示 g(x) 的各個係數。

輸出格式

第一行 n−m+1 個整數,從低到高表示 q(x) 的各個係數。

第二行 m 個整數,從低到高表示 r(x) 的各個係數。

如果 r(x) 不足 m−1 次,多餘的項係數補 0。

證明過程見筆記本。

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define llu unsigned ll

#define int ll

using

namespace std;

const

int maxn=

8e5+

100;

const

int p=

998244353

;const

int gg=3;

int fi[maxn]

;int f[maxn]

,g[maxn]

,q[maxn]

,r[maxn]

,c[maxn]

;int fr[maxn]

,gr[maxn]

,invg[maxn]

;int

mypow

(int a,

int b)

return ans%p;

}void

ntt(

int*x,

int len,

int f)}}

if(f==-1

)}void

getntt

(int

*a,int n,

int*b,

int m)

void

dfs(

int n,

int*a,

int*b)

dfs(

(n+1

)>>

1,a,b)

;int len=

1,cnt=0;

while

(len<=

(n<<1)

) len<<=

1,cnt++

;for

(int i=

0;i)ntt

(c,len,1)

;ntt

(b,len,1)

;for

(int i=

0;i) b[i]=(

2-c[i]

*b[i]

%p+p)

%p*b[i]

%p;ntt

(b,len,-1

);for(

int i=n;i) b[i]=0

;}signed

main

(void

)

多項式除法

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

多項式問題之二 多項式除法

多項式求逆是多項式除法的基礎,如果你不會多項式求逆,請看這裡 問題 已知兩個多項式 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...