牛顿恒等式
牛顿恒等式
牛顿恒等式Newton’s Identities - 知乎 (zhihu.com)
牛顿恒等式(Newton’s Identities)研究多项式方程值和系数之间的关系:
如果$x_1,x_2,…,x_n$是$n$次多项式方程的$n$个根,定义:
一元二次牛顿恒等式
对于一元二次多项式:
两个零点为$\alpha_1,\alpha_2$,定义:
对于$i\geq2$,定义$A=-\frac ba,B=\frac ca$,满足:
可以用韦达定理证明。
例如,计算$P(x)=x^2-2x+6$的两个根为$a,b$时的$a^{10}+b^{10}$:
递推求得:$P_{10}=7552$。
1 | def Newton2(i, A, B): |
一元三次牛顿恒等式
对于一元三次多项式:
三个零点为$\alpha_1,\alpha_2,\alpha_3$,根据韦达定理有:
有定理:
例如,计算$P(x)=x^3-3x^2+6x-9$的三个根为$a,b,c$时的$a^{5}+b^{5}+c^5$:
递推求得:$P_{5}=108$。
一般化牛顿恒等式
对于一元$k$次多项式:
$k$个顶点为$\alpha_1,\alpha_2,\cdots,\alpha_k$,定义以下参数:
同理可推导:
对于$i\geq k$:
相同的,如果我们知道给定$k$个幂次和,就可以恢复以这些值对应的多项式的所有系数$a$。
相关题目
blurred memory
来自2023TPCTF:
1 | from secret import flag |
题目的加密提供了非常多组式子的结果,总共有$253$组式子:
我们所学习的牛顿恒等式形式应该是幂次和形式,但是,如果我们把所有的系数拆开,也可以把等式写成这种形式:
这样就可以得到牛顿恒等式的幂次和形式,出现的重根还可以帮助我们转化每个解密出的flag的位置。
根据一般形式的牛顿恒等式,我们如果想逆回去得到多项式,首先可以根据迭代的$P$反向求得$e$:
1 | from Crypto.Util.number import * |
得到$e$之后,根据$e$的生成式子可以反向得到$a$:
这里为了计算方便,我们默认还原的式子为一个首一多项式,这样就可直接得到$a_k=1$,所有的计算$e$都直接和前面的负一计算即可。
1 | a = [1] |
得到所有的$a$就相当于得到了这个多项式,我们直接用sage求根根据重根次数即可依次还原flag,附上wp:
1 | from Crypto.Util.number import * |