多項式全家桶

2022-09-19 09:33:08 字數 4565 閱讀 2378

#include#include#includeusing namespace std;

const double pi = acos(-1.0);

const int maxn = 1e7 + 5;

inline int read()

int n, m, len, lim = 1;

int r[maxn];

struct complex

complex operator + (complex b) ;

complex operator - (complex b) ;

complex operator * (complex b) ;

}f[maxn], g[maxn];

void fft(complex *a, int op)

} }}int main()

#include#include#define ll long long

using namespace std;

inline int read()

int prnum[21];

inline void print(ll x)

for(register int i = prcnt; i >= 1; i--) putchar(prnum[i] + '0'); }}

const int maxn = 1e6 + 5;

const ll p = 998244353, g = 3, gi = 332748118;

int n, m;

int lim = 1, len, rev[maxn << 2];

ll f[maxn << 2], g[maxn << 2];

inline ll expow(ll x, ll y)

return res;

}inline void ntt(ll *a, int op)

} }}int main()

求 \(g\) 使得 \(f*g \equiv 1\ ( mod\ x^n )\)。

設 \(f*h \equiv 1\ (mod\ x^ \rceil} )\)。

\[g-h \equiv 0\ (mod\ x^ \rceil} )

\]\[g^2 - 2g*h + h^2 \equiv 0\ (mod\ x^n)

\]兩邊同乘 \(f\),得:

\[g-2h+f*h^2 \equiv 0\ (mod\ x^n)

\]\[g\equiv (2-f*h)*h\ (mod\ x^n)

\]當遞迴到常數項時,\(h_0\) 為 \(f_0\) 在模 \(p\) 意義下的逆元。

#include#include#define ll long long

using namespace std;

inline ll read()

int prnum[21];

inline void print(ll x)

for(register int i = prcnt; i >= 1; i--) putchar(prnum[i] + '0'); }}

const int maxn = 4e5 + 5;

const ll mod = 998244353, g = 3, gi = 332748118;

int n, rev[maxn];

ll f[maxn], g[maxn], c[maxn];

inline ll expow(ll x, ll y)

return res;

}inline void ntt(ll *a, int lim, int op)

} }}void solve(int len0, ll *a, ll *b)

}int main()

求 \(g\) 使得 \(g^2 \equiv f\ (mod\ x^n)\)

設 \(h^2 \equiv f\ (mod\ x^ \rceil})\)

\[g-h \equiv 0\ (mod\ x^ \rceil})

\]\[g^2 - 2g*h + h^2 \equiv 0\ (mod\ x^n)

\]\[f - 2g*h + h^2 \equiv 0\ (mod\ x^n)

\]\[g \equiv \frac(f*h^+h)\ (mod\ x^n)

\]當遞迴到常數項時,令 \(h_0\) 為 \(f_0\) 在模 \(p\) 意義下的二次剩餘。

#include#include#include#include#define ll long long

using namespace std;

inline int read()

int prnum[21];

inline void print(ll x)

for(register int i = prcnt; i >= 1; i--) putchar(prnum[i] + '0'); }}

const int maxn = 4e5 + 5;

const ll mod = 998244353, g = 3, gi = 332748118, inv2 = 499122177;

int n, rev[maxn];

ll pow_i, f[maxn], g[maxn], h[maxn], q[maxn], c[maxn];

struct complex ;

inline complex operator * (const complex &x, const complex &y) ; }

inline int randmod()

inline ll expow(ll x, ll y)

return res;

}inline complex expow_i(complex x, int y) ;

while(y)

return res;

}inline ll cipolla(ll x)

res = expow_i((complex), (mod + 1) / 2).a;

return min(res, mod - res);

}void ntt(ll *a, int lim, int op)

} }}void getinv(int len, ll *a, ll *b)

void getsqrt(int len, ll *a, ll *b)

int main()

求 \(q, r\),使得 \(f(x)\equiv g(x)*q(x) + r(x)\ (mod\ x^n)\quad (f(x) 共 n 項,g(x) 共 m 項)\)

若消除 \(r(x)\) 的影響,則可以直接通過多項式乘法逆求出 \(g(x)\),再直接代入,即可求出 \(r(x)\)。

設 \(a_r(x)=x^a(\frac)\)。

\[f(\frac)\equiv g(\frac)*q(\frac) + r(\frac)\ (mod\ x^n)

\]\[x^nf(\frac)\equiv x^mg(\frac)x^q(\frac) + x^nr(\frac)\ (mod\ x^n)

\]\[f_r(x)\equiv g_r(x)*q_r(x)+x^r_r(x)\ (mod\ x^n)

\]\[f_r(x)\equiv g_r(x)*q_r(x)\ (mod\ x^)

\]因為 \(q(x)\) 僅有 \(n-m\) 項,所以模 \(x^\) 並不影響。

\[q_r(x)\equiv f_r(x)*g_r^(x)

\]所以先求出 \(g_r(x)\) 的逆,再做多項式乘法求出 \(q(x)\)。

然後,通過

\[r(x)\equiv f(x)-g(x)*q(x)

\]求出 \(r(x)\)。

寫的時候注意邊界問題,及時清零。

#include#include#define ll long long

using namespace std;

inline int read()

int prnum[21];

inline void print(ll x)

for(register int i = prcnt; i >= 1; i--) putchar(prnum[i] + '0'); }}

const int maxn = 4e5 + 5;

const ll mod = 998244353, g = 3, gi = 332748118;

int n, m, rev[maxn];

ll f[maxn], g[maxn], g0[maxn], gr[maxn], q[maxn], c[maxn];

inline ll expow(ll x, ll y)

return res;

}inline void ntt(ll *a, int lim, int op)

} }}void getinv(int len, ll *a, ll *b)

void getmul(int lena, int lenb, int lenx, ll *a, ll *b)

int main()

多項式全家桶

眾所周知,生成函式是乙個十分強大的東西,許多與多項式相關的演算法也就應運而生了,在這裡選取幾種較為簡單的演算法做乙個介紹.p.s.這篇文章在去年noi前已經完成了一半,現在筆者將其補充完整後發出,同時也為了紀念那一段美好的時光。已知 f x 求 g x 使得 f x g x equiv 1 mod ...

多項式全家桶

已知多項式 g x 求 f x 滿足 g f x equiv 0 pmod 假設我們有乙個 f 0 x 滿足 g f 0 x equiv 0 pmod rceil 由定義可知 f x f 0 x equiv 0 pmod rceil rightarrow forall k ge 2,left f x...

多項式全家桶 更新中

多項式全家桶 多項式加法 省略 多項式減法 省略 多項式乘法 多項式取逆 多項式取商 取模 多項式求導 多項式積分 多項式對數 多項式開方 未完成常數項 多項式指數 多項式冪次 未完成常數項為 0 多項式開 k 次方 未完成 多項式三角函式 多項式反三角函式 includeusing namespa...