多项式除法
多项式除法
定义
则
求法
设
即
为了把
求出
代码
void mul(ll *f, ll *g, ll *h, ll n) // f*g=h
{
for(lim = 1; lim <= n; lim <<= 1);
ntt(f, lim, 1), ntt(g, lim, 1);
for(ll i = 0; i < lim; ++i) h[i] = f[i] * g[i] % mod;
ntt(h, lim, -1), inv = qmi(lim, mod - 2);
for(ll i = 0; i <= n; ++i) h[i] = h[i] * inv % mod;
}
void polymod(ll *f, ll *g, ll *r, ll n, ll m) // f mod g = r,f/g=ar
{
for(ll i = 0; i <= n; ++i) ar[i] = f[n - i];
for(ll i = 0; i <= m; ++i) br[i] = g[m - i];
polyinv(br, invb, n - m + 1);
mul(ar, invb, n, n - m);
reverse(ar, ar + n - m + 1);
mul(ar, g, n - m, m);
for(ll i = 0; i < m; ++i) r[i] = add(f[i], mod - ar[i]);
for(ll i = m; i <= n; ++i) r[i] = 0;
}
应用
也是多项式运算的基本操作
可以用来优化高精度除法