如何在 Sage 中打印伽罗华域的所有加法和乘法
How to print all the additions and multiplications of a Galois Field in Sage
我的命令行有两个输入,一个素数 p 和一个正整数 n。我将它们以 GF(p^n) 的形式放在伽罗华域中。
我的目标是打印出该字段的所有元素、加法和乘法。
我可以打印出字段的元素,但是我如何得到加法和乘法?如果 p 和 n 为 2,我希望它们像这样:
(0) + (0) = 0
(0) + (x) = x
(0) + (x + 1) = x + 1
(0) + (1) = 1
(x) + (0) = x
(x) + (x) = 0
(x) + (x + 1) = 1
(x) + (1) = x + 1
(x + 1) + (0) = x + 1
(x + 1) + (x) = 1
(x + 1) + (x + 1) = 0
(x + 1) + (1) = x
(1) + (0) = 1
(1) + (x) = x + 1
(1) + (x + 1) = x
到目前为止,这是我的代码:
import sys
p = int(sys.argv[1])
n = int(sys.argv[2])
k = GF(p**n, 'x')
for i,x in enumerate(k): print x
print '(%s) + (%s) = %s' % (i, j, i + j)
您可以简单地对 k
的元素使用嵌套循环,而不是对元素的 索引 使用嵌套循环:
sage: for e0 in k:
....: for e1 in k:
....: print '(%s) + (%s) = %s' % (e0, e1, e0+e1)
....:
(0) + (0) = 0
(0) + (x) = x
(0) + (x + 1) = x + 1
(0) + (1) = 1
(x) + (0) = x
(x) + (x) = 0
(x) + (x + 1) = 1
(x) + (1) = x + 1
(x + 1) + (0) = x + 1
(x + 1) + (x) = 1
(x + 1) + (x + 1) = 0
(x + 1) + (1) = x
(1) + (0) = 1
(1) + (x) = x + 1
(1) + (x + 1) = x
(1) + (1) = 0
或者,您可以使用 CartesianProduct
(或纯 Python 中的 itertools.product
):
sage: for e0, e1 in CartesianProduct(k,k):
....: print '(%s) + (%s) = %s' % (e0, e1, e0+e1)
....:
(0) + (0) = 0
(0) + (x) = x
[etc.]
我的命令行有两个输入,一个素数 p 和一个正整数 n。我将它们以 GF(p^n) 的形式放在伽罗华域中。
我的目标是打印出该字段的所有元素、加法和乘法。
我可以打印出字段的元素,但是我如何得到加法和乘法?如果 p 和 n 为 2,我希望它们像这样:
(0) + (0) = 0
(0) + (x) = x
(0) + (x + 1) = x + 1
(0) + (1) = 1
(x) + (0) = x
(x) + (x) = 0
(x) + (x + 1) = 1
(x) + (1) = x + 1
(x + 1) + (0) = x + 1
(x + 1) + (x) = 1
(x + 1) + (x + 1) = 0
(x + 1) + (1) = x
(1) + (0) = 1
(1) + (x) = x + 1
(1) + (x + 1) = x
到目前为止,这是我的代码:
import sys
p = int(sys.argv[1])
n = int(sys.argv[2])
k = GF(p**n, 'x')
for i,x in enumerate(k): print x
print '(%s) + (%s) = %s' % (i, j, i + j)
您可以简单地对 k
的元素使用嵌套循环,而不是对元素的 索引 使用嵌套循环:
sage: for e0 in k:
....: for e1 in k:
....: print '(%s) + (%s) = %s' % (e0, e1, e0+e1)
....:
(0) + (0) = 0
(0) + (x) = x
(0) + (x + 1) = x + 1
(0) + (1) = 1
(x) + (0) = x
(x) + (x) = 0
(x) + (x + 1) = 1
(x) + (1) = x + 1
(x + 1) + (0) = x + 1
(x + 1) + (x) = 1
(x + 1) + (x + 1) = 0
(x + 1) + (1) = x
(1) + (0) = 1
(1) + (x) = x + 1
(1) + (x + 1) = x
(1) + (1) = 0
或者,您可以使用 CartesianProduct
(或纯 Python 中的 itertools.product
):
sage: for e0, e1 in CartesianProduct(k,k):
....: print '(%s) + (%s) = %s' % (e0, e1, e0+e1)
....:
(0) + (0) = 0
(0) + (x) = x
[etc.]