題目傳送門:
題目分析:放個板子在blog上,以後複習的時候用。
注意每一次呼叫poly_rev()的時候都要重新計算一遍rev陣列,而且要先清0。
求modxm
modx
m下的逆元的時候,注意ntt的次數界要開到2m,因為a(
x)g2
(x) a(x
)g2(
x)
的次數界加起來為m+
m2+m
2−2=
2m−2
m +m
2+m2
−2=2
m−2。
這份板子看起來跑得還挺快的。
code:
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn=1000100;
const
long
long m=998244353;
const
long
long g=3;
typedef
long
long ll;
ll a[maxn];
ll b[maxn];
int rev[maxn];
int n,lg;
ll g[maxn];
ll f[maxn];
int n;
ll pow(ll x,ll y)
void dft(ll *a,int f)
dft(a,1);
dft(b,1);
for (int i=0; i1);
ll inv=pow(n,m-2);
for (int i=0; ivoid poly_rev(int m)
洛谷P4238 模板 多項式乘法逆
給定乙個多項式 f x 請求出乙個多項式 g x 滿足 f x g x equiv 1 mathrm x n 係數對 998244353 取模。n leq 10 5 假設我們已經知道了 f x g x equiv 1 pmod 考慮如何推廣到 f x g x equiv 1 pmod 首先顯然有 g...
luoguP4238 模板 多項式求逆
令 b x 表示 a x 在 x 下的逆 那麼有 b x 2b x ab x 遞迴一下即可 在 len 1 時直接對常數項求逆即可 這裡一定要注意!取逆的時候是預設 x 的,所以如果在多項式後面多加幾個 0 的話逆是會變的!因為模數改變了!code include include include i...
Luogu 4238 模板 多項式求逆
瘋狂補板中。考慮倍增實現。假設多項式只有乙個常數項,直接對它逆元就可以了。現在假如要求 g x f x g x equiv 1 mod x n 而我們已經求出了 h x f x h x equiv 1 mod x right rceil 兩式相減,f x g x h x equiv 0 mod x ...