多項式總結及模板

2021-09-13 22:52:14 字數 2116 閱讀 8840

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...