如何在 SymPy 中处理伽罗华域上的多项式

How to work with polynomials over Galois fields in SymPy

伽罗华域在 SymPy 中是如何表示的?我在网上找不到任何关于此的文档,但 SymPy 包含一个名为 "galoistools" 的模块,所以我想我应该试一试。我尝试了以下实验:

from sympy import *
x = symbols("x")
A = [LC(Poly(i*x, modulus=8) * Poly(j*x, modulus=8)) for i in range(1, 8) for j in range(1, i+1)]
B = [LC(Poly(i*x, domain=GF(8)) * Poly(j*x, domain=GF(8))) for i in range(1, 8) for j in range(1, i+1)]

但是,结果列表 AB 是相同的,所以我显然误解了它应该如何使用。我正在尝试在 GF(8) 中工作,即 GF(2^3),这与计算模 8 不同。

目前 SymPy 不支持 Z/pZ 以外的有限域。现有的 class GF(n) 被错误地命名;正如您观察到的那样,它实际上实现了 Z/nZ 。

但是,使用 galoistools 模块中的低级例程,可以为一般有限域 GF(p^n) 和此类域上的多项式创建 class:参见 实现这些 classes 的地方(为了计算插值多项式,但它们也可以用于其他事情)。这只是一个最小的class;它不与 SymPy 中实现的高级多项式操作方法交互。