用有限域中的系数求模另一个多项式的多项式的倒数(倒数)

时间:2018-10-04 20:34:27

标签: python sympy galois-field

如果我有一个多项式P,是否有一种方法可以计算P ^ -1模Q,而Q是另一个多项式? 我知道这两个多项式的系数都属于以z为整数的模的整数字段。

我不确定SymPy在其galoistools模块中是否已经具有该功能。

1 个答案:

答案 0 :(得分:1)

这与查找多项式S,T使得PS + QT = 1基本相同。这在gcd(P,Q)= 1时是可能的,并且可以用galoistools.gf_gcdex完成。例如,让我们用系数字段Z / 11Z对3x^3+2x+4进行模x^2+2x+3求逆:

from sympy.polys.domains import ZZ
from sympy.polys.galoistools import gf_gcdex

p = ZZ.map([3, 0, 2, 4])
q = ZZ.map([1, 2, 3])
z = 11
s, t, g = gf_gcdex(p, q, z, ZZ)
if len(g) == 1 and g[0] == 1: 
    print(s)
else:
    print('no inverse')

这将打印[8, 5]-倒数是8x+5。手动进行健全性检查:

(3x^3+2x+4)*(8x+5) = 24x^4 + 15x^3 + 16x^2 + 42x + 20 
                   = 2x^4 + 4x^3 + 5x^2 + 9x + 9
                   = (x^2 + 2x + 3)*(2x^2 - 1) + 1
                   = 1 mod q