English | 中文
POLY.H 是一个提供多项式线性运算、卷积、计算乘法逆、平方根、对数和指数的模板库。支持任意模数多项式。
poly.h 中定义了两个类,名为 poly
和 m_poly
。它们都在命名空间 fstdlib
中。
其中,poly
是固定模数的多项式类,它的模数定义为 fstdlib::mod
,默认值为 VARIABLE_MODULO
。您必须保证修改后:
- 模数是一个能够用于 NTT 的模数。换句话讲,它必须能表示为
$O(k\cdot 2^r + 1)$ 的形式,且$2^r$ 足够大。 - 模数的两倍应当在 32 位有符号整数的表示范围内。
如果 fstdlib::grt
的值改为您设定模数的一个原根。
而 m_poly
是任意模数的多项式类。它的模数直接存储在实例中,您可以通过访问一个实例的 mod
成员来修改它。该种多项式的模数没有特别要求,但您仍应当保证:
- 模数的两倍应当在 32 位有符号整数的表示范围内。
- 任意两个进行运算的实例的模数相同。
- 如果模数不是质数,实例不能进行开根、求逆等运算。
方法 | 简介 |
---|---|
poly(std::size_t n) |
构造一个长度为 |
poly(std::vector<int> a) |
用 |
m_poly(std::size_t n, int p) |
构造一个长度为 |
m_poly(std::vector<int> a, int p) |
用 |
方法 | 简介 | 时间复杂度 |
---|---|---|
poly operator*(const poly &, const poly &) |
计算两个多项式的卷积。 | |
poly &operator*=(poly &, const poly &) |
计算两个多项式的卷积。 | |
poly operator*(const poly &, const int & |
计算多项式和单项式的卷积。 | |
poly &operator*=(poly &, const int &) |
计算多项式和单项式的卷积。 | |
poly operator*(const int &, const poly &) |
计算多项式和单项式的卷积。 | |
poly operator>>(const poly &, const int &) |
将多项式右移指定次。 | |
poly &operator>>=(poly &, const int &) |
将多项式右移指定次。 | |
poly operator<<(const poly &, const int &) |
将多项式左移指定次。 | |
poly &operator<<=(poly &, const int &) |
将多项式左移指定次。 | |
poly operator+(const poly &, const poly &) |
计算两个多项式的和。 | |
poly &operator+=(poly &, const poly &) |
计算两个多项式的和。 | |
poly operator+(const poly &, const int & |
计算多项式和单项式的和。 | |
poly &operator+=(poly &, const int &) |
计算多项式和单项式的和。 | |
poly operator+(const int &, const poly &) |
计算多项式和单项式的和。 | |
poly operator-(const poly &, const poly &) |
计算两个多项式的差。 | |
poly &operator-=(poly &, const poly &) |
计算两个多项式的差。 | |
poly operator-(const poly &, const int & |
计算多项式和单项式的差。 | |
poly &operator-=(poly &, const int &) |
计算多项式和单项式的差。 | |
poly operator-(const int &, const poly &) |
计算单项式和多项式的差。 | |
poly operator/(const poly &, const int &) |
计算多项式和单项式的逆的卷积, | |
poly operator/=(const poly &, const int &) |
计算多项式和单项式的逆的卷积, |
方法 | 简介 | 时间复杂度 |
---|---|---|
poly poly::inv(void)const |
计算多项式相同次数的逆。 | |
poly poly::inv(std::size_t)const |
计算多项式指定次数的逆。 | |
poly poly::prefix(std::size_t)const |
计算多项式前若干项的和。允许参数大于多项式本身的长度。 |
方法 | 简介 | 时间复杂度 |
---|---|---|
poly sqrt(const poly &) |
计算多项式的平方根。 | |
poly log(const poly &) |
计算多项式的自然对数。 | |
poly exp(const poly &) |
计算多项式的指数函数。 |
- 作为
sqrt
参数的多项式的常数项必须为$1$ 。 - 作为
log
参数的多项式的常数项必须为$1$ 。 - 作为
exp
参数的多项式的常数项必须为$0$ 。