Как напечатать все сложения и умножения поля Галуа в 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)

1 ответ

Решение

Вы можете просто использовать вложенные циклы над элементами 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 (или же itertools.product в чистом Python):

sage: for e0, e1 in CartesianProduct(k,k):
....:     print '(%s) + (%s) = %s' % (e0, e1, e0+e1)
....:     
(0) + (0) = 0
(0) + (x) = x
[etc.] 
Другие вопросы по тегам