多项式开根

本文介绍了如何求解g(x)=f(x)^{2^k}(mod x^n)的问题,其中f(x)的常数项为1。提出了两种算法:算法1基于指数和对数,时间复杂度为O(nlogn);算法2利用牛顿迭代,时间复杂度同样为O(nlogn),但常数项较大。对于常数项不为1的情况,可以通过找到常数项的二次剩余来解决。文中还提供了一个挑战多项式的例题及加强版模板。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

已知 f ( x ) f(x) f(x),求 g ( x ) = f ( x ) 1 2 ( m o d x n ) g(x) = f(x)^{\frac 12} \pmod{x^n} g(x)=f(x)21(modxn)
保证常数项为 1 1 1

算法 1 1 1 g ( x ) = exp ⁡ ( ln ⁡ f ( x ) 2 ) g(x) = \exp(\frac {\ln f(x)}2) g(x)=exp(2lnf(x)) O ( n log ⁡ n ) O(n\log n) O(nlogn)
算法 2 2 2 g ( x ) 2 = f ( x ) ( m o d x n ) g(x)^2 = f(x) \pmod{x^n} g(x)2=f(x)(modxn)
g ( x ) 2 − f ( x ) = 0 g(x)^2-f(x)=0 g(x)2f(x)=0
牛顿迭代。
g 1 ( x ) = g 0 ( x ) − g 0 ( x ) 2 − f ( x ) 2 g 0 ( x ) = g 0 ( x ) 2 + f 0 ( x ) 2 g 0 ( x ) g_1(x)=g_0(x)-\frac {g_0(x)^2-f(x)}{2g_0(x)}=\frac {g_0(x)}2+\frac{f_0(x)}{2g_0(x)} g1(x)=g0(x)2g0(x)g0(x)2f(x)=2g0(x)+2g0(x)f0(x)
T ( n ) = T ( n 2 ) + O ( n log ⁡ n ) = O ( n log ⁡ n ) T(n) = T(\frac n2) + O(n\log n) = O(n\log n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值