多项式各种奇怪算法学习

(如无特殊声明,均默认n为2的次幂)

多项式求逆

要干嘛?

已知 f ( x ) f(x) f(x),求 g ( x ) g(x) g(x) f ( x ) g ( x ) ≡ 1 ( m o d   x n ) f(x)g(x)\equiv 1(mod\ x^n) f(x)g(x)1(mod xn).
m o d   x n mod\ x^n mod xn指只考虑指数小于n的所有项。

怎么搞?

n 2 n^2 n2算法是显然的。
考虑 n l o g n nlogn nlogn算法。
设我们已经知道了满足 f ( x ) g ′ ( x ) ≡ 1 ( m o d   x n 2 ) f(x)g'(x)\equiv 1(mod\ x^{\frac{n}{2}}) f(x)g(x)1(mod x2n)
显然 f ( x ) g ( x ) ≡ 1 ( m o d   x n 2 ) f(x)g(x)\equiv 1(mod\ x^{\frac{n}{2}}) f(x)g(x)1(mod x2n)
那么 f ( x ) g ( x ) − f ( x ) g ′ ( x ) ≡ 0 ( m o d   x n 2 ) f(x)g(x)-f(x)g'(x)\equiv 0(mod\ x^{\frac{n}{2}}) f(x)g(x)f(x)g(x)0(mod x2n)
g ( x ) − g ′ ( x ) ≡ 0 ( m o d   x n 2 ) g(x)-g'(x)\equiv 0(mod\ x^{\frac{n}{2}}) g(x)g(x)0(mod x2n)也是显然的。
然后同时平方得到 g 2 ( x ) − 2 g ( x ) g ′ ( x ) + g ′ 2 ( x ) ≡ 0 ( m o d   n ) g^2(x)-2g(x)g'(x)+g'^2(x)\equiv 0(mod \ n) g2(x)2g(x)g(x)+g2(x)0(mod n)
此处用平方使得满足的位数上升。
左右同乘 f ( x ) f(x) f(x) g ( x ) − 2 g ′ ( x ) + f ( x ) g ′ 2 ( x ) ≡ 0 ( m o d   n ) g(x)-2g'(x)+f(x)g'^2(x)\equiv 0(mod\ n) g(x)2g(x)+f(x)g2(x)0(mod n)
这里左侧要得到的 g ( x ) g(x) g(x)由于其性质一个和 f ( x ) f(x) f(x)相抵消变成 1 ( m o d   n ) 1(mod\ n) 1(mod n)
所以有 g ( x ) ≡ 2 g ′ ( x ) − f ( x ) g ′ 2 ( x ) g(x)\equiv 2g'(x)-f(x)g'^2(x) g(x)2g(x)f(x)g2(x)
log次FFT/NTT即可。

多项式取模(带余除法)

要干嘛?

已知f(x),g(x),求h(x)、r(x)使得其满足 g ( x ) ≡ f ( x ) ∗ h ( x ) + r ( x ) g(x)\equiv f(x)*h(x)+r(x) g(x)f(x)h(x)+r(x)

咋搞?

考虑我们对h有什么要求?
f ( x ) ∗ h ( x ) f(x)*h(x) f(x)h(x)在某个位以上必须和 f ( x ) f(x) f(x)相同,以下不用管。
考虑我们之前求逆干了什么?
f ( x ) ∗ h ( x ) f(x)*h(x) f(x)h(x)第一位必须是1,某位以下都是0,某位以上无所谓。
翻转一下完事。、
h r ( x ) = g r ( x ) ∗ f r − 1 ( x ) h_r(x)=g_r(x)*f_r^{-1}(x) hr(x)=gr(x)fr1(x),其中r表示翻转。

多项式开方

要干嘛?

已知 f ( x ) f(x) f(x),求 g 2 ( x ) ≡ f ( x ) ( m o d   n ) g^2(x)\equiv f(x)(mod\ n) g2(x)f(x)(mod n)

咋搞?

考虑 g ′ ( x ) g'(x) g(x)使得 g ′ 2 ( x ) ≡ f ( x ) ( m o d   n 2 ) g'^2(x)\equiv f(x)(mod\ \frac{n}{2}) g2(x)f(x)(mod 2n)
由于 n 2 \frac{n}{2} 2n以上的项不会对 n 2 \frac{n}{2} 2n内的平方值产生影响
g ′ ( x ) ≡ g ( x ) ( m o d   n 2 ) g'(x)\equiv g(x)(mod\ \frac{n}{2}) g(x)g(x)(mod 2n)
同时平方得到 g 2 ( x ) − 2 g ( x ) g ′ ( x ) + g ′ 2 ( x ) ( m o d   n ) g^2(x)-2g(x)g'(x)+g'^2(x)(mod\ n) g2(x)2g(x)g(x)+g2(x)(mod n)注意此处利用平方使得满足
发现 g 2 ( x ) g^2(x) g2(x)就是 f ( x ) f(x) f(x)
所以 g ( x ) ≡ f ( x ) + g ′ 2 ( x ) 2 g ′ ( x ) ( m o d   n ) g(x)\equiv \frac{f(x)+g'^2(x)}{2g'(x)}(mod\ n) g(x)2g(x)f(x)+g2(x)(mod n)
递推即可。
常数项上二次剩余解决。

多项式多点快速求值

暴力

秦九韶不会的麻烦重修高中数学

引入

假设我们有一个多项式 f ( x ) f(x) f(x),那么它在 x i x_i xi处的取值和它膜 x − x 0 x-x0 xx0(注意这是个多项式!)相等。
冷静分析我们膜的时候干了什么:把高位减掉低位加上,会发现差不多就是个正向算的过程。
我们可以对每个询问做一次多项式膜法。 n 2 l o g n^2log n2log大常数。会被 n 2 n^2 n2吊锤。

优化?

考虑复杂度瓶颈在哪。
我们每次做的是一个n次的多项式对一个1次的多项式取模。
我们希望前面的多项式式次数低一点。

怎么搞?

我们考虑一块处理。
首先有显然的 ( a   m o d   b ) m o d   c = = a   m o d   c ( b   m o d   c = = 0 ) (a\ mod \ b)mod\ c==a\ mod\ c(b\ mod\ c==0) (a mod b)mod c==a mod c(b mod c==0)
那么我们同时处理两个的话,就可以先花一次 n l o g n nlogn nlogn的代价用原多项式膜 ( x − x 0 ) ( x − x 1 ) (x-x_0)(x-x_1) (xx0)(xx1)使得次数下降到2,然后再分别膜。
多个的话就(类)线段树分治。
注意需要先从底向上处理 ( x − x l ) ( x − x l + 1 ) ( x − x l + 2 ) . . . . . ( x − x r ) (x-x_l)(x-x_{l+1})(x-x_{l+2}).....(x-x_{r}) (xxl)(xxl+1)(xxl+2).....(xxr)
总复杂度 n l o g 2 n nlog^2n nlog2n

多项式插值

要干嘛?

你有若干点,要求求出满足这些点的一个多项式。

怎么搞?

拉格朗日插值公式。

h i ( x ) = ( x − x 1 ) ( x − x 2 ) ( x − x 3 ) . . . . . . ( x − x i − 1 ) ( x − x i + 1 ) . . . . . . ( x − x n ) ( x i − x 1 ) ( x i − x 2 ) . . . . . . ( x i − x i − 1 ) ( x i − x i − 2 ) . . . . . . ( x i − x n ) h_i(x)=\frac{(x-x_1)(x-x_2)(x-x_3)......(x-x_{i-1})(x-x_{i+1})......(x-x_n)}{(x_i-x_1)(x_i-x_2)......(x_i-x_{i-1})(x_i-x_{i-2})......(x_i-x_{n})} hi(x)=(xix1)(xix2)......(xixi1)(xixi2)......(xixn)(xx1)(xx2)(xx3)......(xxi1)(xxi+1)......(xxn)
这个多项式在 x = x j ( j ! = i ) x=x_j(j!=i) x=xj(j!=i)时为0,在 x = x i x=x_i x=xi时为1
一堆这个多项式叠起来就能得到所需多项式。

怎么求

考虑先求分母。
我们发现要求 ( x i − x 1 ) ( x i − x 2 ) ( x i − x 3 ) ( x i − x 4 ) . . . . ( x i − x i − 1 ) ( x i − x i + 1 ) . . . ( x i − x n ) (x_i-x_1)(x_i-x_2)(x_i-x_3)(x_i-x_4)....(x_i-x_{i-1})(x_i-x_{i+1})...(x_i-x_{n}) (xix1)(xix2)(xix3)(xix4)....(xixi1)(xixi+1)...(xixn),要是 x ! = x i x!=x_i x!=xi我们就可以直接拿全部的乘积除差,但是不行就利用导数的性质 f ′ ( x i ) f'(x_i) f(xi)即为所求(是个值),多项式多点求值即可。
然后考虑分子,和要乘的y。
这个东西可以用线段树分治使得每个对应多项式获得应当的系数。
https://www.cnblogs.com/Tiw-Air-OAO/p/10198693.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值