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