1.求逆
設要對多項式a求逆,逆為b:
求在模ceil(n/2)的逆,將原式與之相減後平方,發現可得在模n意義下也是0了,然後兩邊同乘a,移項即可倍增了(注意此時a也是在模當前長度意義下的)。
最後倍增形式為b'=2*b-b*b*a (b』等於2b減b方a),邊界為常數取逆元,也可發現多項式有無逆取決於常數有無逆元
2.開根
與求逆類似,先求ceil(n/2),然後將a移到左邊使等式右邊變成0,平方,加上4b^2a,再把右邊b^2除到左邊就發現ok了。
最終倍增形式:b'=(a+b*b)/2b(b'等於a加b方後除以2b),除法就上求逆,邊界是常數開根,暴力列舉(並不會二次剩餘...)?模板題保證是1...
(開根裡面套求逆,雖說複雜度仍然是nlog,但已經比大部分兩個log慢了。。。)
3.ln
兩邊求導得到所求的導數b』=a'/a,再積分即可。
4.exp
b=e^(a)
根據牛頓迭代的那套理論,設乙個函式c,使c(b)=0,那麼c(b)=lnb-a
假設已知在mod x^n的b0,要求在mod x^2n的b1
有c(b)=c(b0)/0!+c'(b0)/1!*(b-b0)+...
發現...可以省略,因為在mod x^n下b是唯一確定的,而mod x^2n下一定也滿足mod x^n下,所以在mod x^2n時後面低的n位與mod x^n相等,當求的導數大於等於二階發現(b-b0)那一項的冪次大於等於2,也就是最小的x項冪次大於等於2n,省略即可。
最終推得
b1=b0-c(b0)/c'(b0)
而c求導時是在把b0這個多項式看成變數求導(不要把每一項的x看成變數),a是已知多項式要看成乙個常數
故b1=b0(1-ln(b0)+a)
倍增即可。(注意能exp一定要滿足0次項為0,不然無法賦初值)
先貼4個的**:
#include#define ll long long
using namespace std;
const int mod=998244353;
const int n=1e5+100;
void ad(int &x,int y)
void mul(int &x,int y)
int qpow(int x,int y)
return res;
}namespace poly
void cal_wh()
void ntt(vector&a,bool inv)
int md=(n+1)/2;
vectora,c;
pre_ntt(n+md+md),a.resize(len),c.resize(len);
get_inv(c,md);
pre_ntt(n+md+md),cal_wh();
for(int i=0;i&a,vector&res,int n)
void get_sqrt(vector&b,int n)
int md=(n+1)/2;
vectora,c;
pre_ntt(n+n),a.resize(len),c.resize(len);
get_sqrt(c,md);
for(int i=0;i&a,vector&res,int n)
void dao(vector&a,vector&res,int n)
void ln(vector&a,vector&res,int n)
int md=(n+1)/2;
vectorb0;
b0.resize(n),b1.resize(n);
get_exp(b0,md),ln(b0,b1,n);
for(int i=0;i&a,vector&res,int n)
}int main()
return res;
}inline ll add(ll x,ll y)
inline ll sub(ll x,ll y)
inline ll mul(ll x,ll y)
namespace poly
void ntt(vector&a,bool inv)
vectorpoly_sub(vectorx,vectory)
多項式模板
檢查資料 input 61 2 3 4 5 6 1.ntt多項式求逆 include define maxn 2100005 define ll long long define mod 998244353 using namespace std int lg maxn r maxn w maxn ...
MATLAB多項式及多項式擬合
多項式均表示為陣列形式,陣列元素為多項式降冪係數 1.polyval函式 求多項式在某一點或某幾個點的值.p 1,1,1 x 2 x 1 x 1,0,1 y polyval p,x 另外求函式在某一點或某幾個點的值可以用函式feval.x 1,0,1 y feval x exp x x 注意用的乘法...
多項式 多項式跑飛快 石室中學秘傳模板
終於把多項式板子打完啦!最後補充一點三角函式的芝士 求cos f cos f cosf 與sin f sin f sinf 想到偉大的尤拉公式!e i cos i sin e cos theta i sin theta e i cos i sin theta 看成多項式一樣的 推柿子得到 cos f...