2016-02-01 7 views

ответ

2

Вы можете получить некоторый примитивный элемент со следующим кодом:

var = 'x; \\ sets a variable in the polynomial representation of finite field 
f = ffgen(ffinit(q, n)); \\ GF(q^n) ~ GF(q)[x]/<f(x)>. Note `f` is just an irreducible 
a = ffprimroot(f); \\ gets a root `a` of `f` 
poly = minpoly(a, var); \\ finds a minimal polynomial for `a` 
primitive_elt = ffgen(poly, var); \\ finds a root of the minimal polynomial 

\\ assertion: check the order 
fforder(primitive_elt) == q^n-1 

Отметим, что конечное поле может иметь некоторые примитивные элементы. Вышеприведенный код находит случайным. Пожалуйста, обратите внимание, что приведенный выше код предполагает n> 1. В противном случае сработает функция minpoly (протестирована с PARI/GP 2.7.2 32-бит).

+0

Не могли бы вы любезно помочь мне. Пусть 'n = m * p'. Как получить примитивный элемент 'GF (q^n)' как m-мерный вектор над GF (q^p) '? –

+0

@aka_test: Чтобы достичь своей цели, вы должны вычислить минимальный многочлен 'GF (q^n)' как многочлен над 'GF (q^p)'. Подробности см. На http://johnkerl.org/doc/ffcomp.pdf (раздел 6.1). –