提问人:fepaul 提问时间:10/12/2023 最后编辑:Adafepaul 更新时间:10/14/2023 访问量:18
在有限域中计算平方根时的 Sage 误差
Sage error while calculating square root in finite field
问:
错误信息: TypeError:不在主子字段中
在处理上述异常的过程中,发生了另一个异常:
TypeError:无法将 z^3 + z + 1 转换为有理数
在处理上述异常的过程中,发生了另一个异常:
ValueError: z^3 + z + 1 不在图像中(映射到强制系统内部 -- 使用前复制) 环形: 寄件人:大小为 2 的有限域 收件人:z 中大小为 2^4 的有限域
我只想在鼠尾草的有限域中计算多项式的平方根。我知道它存在,并且可以通过将每个系数的平方根乘以变量^(exponent/2)来计算,因为只有偶数指数出现 - 我该如何实现?
我的代码适用于二进制 Goppa 多项式 G,但不适用于一般 Goppa 多项式 - 问题在于某些东西的转换
这些是使用的变量
K ist 定义如下(所以 F_2^m):
f = irreducibles_z[0]
#Now we can initialise the field
K.<z> = GF(2^m, modulus = f)
return K
西格玛 [z^2, z^3 + z^2 + 1, z^3 + z^2 + z, z, 0, z^3 + z, z^3 + z + 1, 1, z + 1, z^3, z^3 + 1, z^3 + z^2 + z + 1, z^3 + z^2, z^2 + z + 1, z^2 + z, z^2 + 1]
g (z^2 + z + 1)*x^3 + (z^3 + z^2 + z + 1)*x^2 + (z^3 + z^2 + 1)*x + z^3 + z + 1
z 中的 K 有限域,大小为 2^4
吨 3
米 4
n 16
米 r
G 单元商多项式环 x 在有限域上,z 大小为 2^4,模量为 x^3 + z^2 x^2 + z^3 x + z^3 +z^2+ z + 1
SW (z^2 + z)x^2 + z^2 x + z^2+ z + 1
此函数被调用
v = calculate_v(g, K, t, Sw, verbose)
它执行以下操作
def calculate_v(g, K, t, Sw, verbose):
#This helper field with indeterminate b is used
# to check for all x's if they are a square,
#as this functionality is not available for
# F_{2^m}[x]/g(x,z), but is available for F_{2^t}
G.<x> = K.extension(g)
_.<b> = GF(2)[]
--> ERROR: SqrtField.<b> = GF(2^t, modulus = g(b))
#This helper function checks for all pairs of
# C_i*x^i if c_i is a square and x^i is a square,
#because only then c_i*x^i is a square
def is_square_f2mx(el):
coefs = list(el)
result = True
for index,coef in enumerate(coefs):
if coef != 0:
result = result and (b^index).is_square() and coef.is_square()
return result
#This helper function converts an element from helper
# field SqrtField back to F_{2^m}[x]/g(x)
def b_to_x(element):
xcoefs = element.polynomial().coefficients(sparse = False)
xvalue = 0
for exponent,xcoef in enumerate(xcoefs):
if xcoef != 0:
xvalue += x^exponent
return xvalue
#Using the observation from the previous cell,
# this function calculates the square root
# of an element in F_{2^m}[x]
#by taking the square root of each coefficient c_i
# and each x^i separately
# and then multiplying them afterwards
def sqrt_f2mx(element, Sw):
# assert is_square_f2mx(element), "not a square"
result = 0
for index,coef in enumerate(list(element)):
if coef != 0:
#bsquare_for_x = sqrt(b^index)
#xsquare = b_to_x(bsquare_for_x)
coefsqrt = sqrt(coef)
result += coefsqrt*x ^(index/2) #xsquare
return result
v = sqrt_f2mx(x + Sw^-1, Sw)
if verbose:
latexprint(r"\text{This is our polynomial }V(x,z)")
latexprint(latex(v))
return v
问题是这条线不起作用。
对于二元多项式 g,它起作用(GF(2) 中的所有系数,但 GF(2^m) 中的系数不起作用SqrtField.<b> = GF(2^t, modulus = g(b))
任何建议
感谢您的帮助!
答: 暂无答案
评论