2015-03-04 6 views
0

Моя командная строка принимает два входа, простое число p и положительное целое число n. Я помещал их в поле Галуа в виде GF (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.] 
+0

Спасибо, это сработало. – umdcoder