Sympy中使用random_poly生成GF(2)域随机多项式失败:返回整数域(ZZ)多项式的技术问询
解决SymPy中生成GF(2)域随机多项式的问题
我太懂这种头疼的感觉了!SymPy的random_poly函数确实有点“轴”,你直接传domain=GF(2)它并不会乖乖生成GF(2)域的多项式,还是会返回整数域(ZZ)的结果。不过没关系,有两个简单的办法能搞定这个问题:
方法一:转换已生成的多项式到GF(2)域
先正常生成随机多项式,再用Poly类重新指定域为GF(2),这样系数会自动模2转换:
import sympy from sympy import symbols, Poly, GF from sympy.polys.specialpolys import random_poly x = symbols('x') # 先生成整数域的随机多项式 pp = random_poly(x, 5, 0, 1) # 转换到GF(2)域 pp_gf2 = Poly(pp, x, domain=GF(2)) print(pp_gf2)
输出会是类似Poly(x**5 + x**3 + 1, x, modulus=2)的形式,和你手动创建的p一致。
方法二:直接在生成时指定模数
其实random_poly函数本身支持modulus参数,直接传modulus=2就能生成GF(2)域的多项式,一步到位:
pp = random_poly(x, 5, 0, 1, modulus=2) print(pp)
这样生成的多项式会直接关联到GF(2)域,输出同样会显示modulus=2,完全符合你的需求。
你之前的代码里用了domain=GF(2)参数,但random_poly并不优先识别这个参数来限定域,反而modulus才是控制有限域的正确参数,这也是容易踩坑的地方~
内容的提问来源于stack exchange,提问作者Pierre G.
相关产品推荐
相关产品推荐

