2018.12.30 洛谷P4238 【模板】多項式求逆
阿新 • • 發佈:2018-12-31
傳送門
多項式求逆模板題。
簡單講講?
多項式求逆
- 定義:
對於一個多項式 ,如果存在一個多項式 ,滿足 的次數小於等於 且 ,那麼我們稱B(x)為 在模 意義下的逆元,簡單記作 - 求法:
那不就是 的逆元麼。
我們令
那麼有
然後可以用類似倍增的方法求。
假設我們已經知道 滿足 (這裡的 都是向上取整)
顯然 是成立的。
我們將兩式相減:
所以
然後將兩邊平方:
=>
這一步很關鍵,請神犇們仔細思考原因
然後兩邊同時乘上
=>
於是
乘法可以用 加速,因為每次遞迴的時候多項式最高次項都減少一半,所以總複雜度仍然是
程式碼:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
typedef long long ll;
const int mod=998244353;
int n;
inline int ksm(int a,int p){int ret=1;for(;p;p>>=1,a=(ll)a*a%mod)if(p&1)ret=(ll)ret*a%mod;return ret;}
inline int add(const int&a,const int&b){return a+b>=mod?a+b-mod:a+b;}
inline int dec(const int&a,const int&b){return a>=b?a-b:a-b+mod;}
inline int mul(const int