題目描述
給定乙個 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...