Расширенные полиномы в библиотеке NTL

Там код написан с использованием библиотеки NTL:

int main()
{
ZZ_p::init(ZZ(5)); // define GF(5)

ZZ_pX P;
BuildIrred(P, 4); // generate an irreducible polynomial P
// of degree 4 over GF(5)

ZZ_pE::init(P); // define GF(5^4)

ZZ_pEX f, g, h;  // declare polynomials over GF(5^4)

random(f, 3);  // f is a random, monic polynomial of degree 3
SetCoeff(f, 3);
cout << f << endl<< endl;
}

Выход:

[[3 1 1 4] [2 1 3 2] [1 0 3 1] [1]]

Например, [1 2 3] значит 3x² + 2x + 1,
Какая форма обозначения полинома над GF в этом случае?

1

Решение

Ваш вопрос немного сложен для понимания. Если я вас правильно понимаю, вопрос в том, как интерпретировать представление NTL [[3 1 1 4] [2 1 3 2] [1 0 3 1] [1]] многочлена над конечным полем с 5⁴ элементами.

Первое: элементы в конечном поле с 5⁴ элементами (называемые GF(5⁴)) представлены в виде полиномов GF(5)[X] mod f, где f неприводимый многочлен степени 4.

Это означает, что многочлен над GF(5⁴) является полиномом, где коэффициенты являются полиномами в GF(5)[X] mod f,

Так [[3 1 1 4] [2 1 3 2] [1 0 3 1] [1]] можно интерпретировать как

Y³ + (X³ + 3X² + 1)⋅Y² + (2X³ + 3X² + X + 2)⋅Y + (4X³ + X² + X + 3)

Примечание: комментарий в

random(f, 3);  // f is a random, monic polynomial of degree 3
SetCoeff(f, 3);

немного вводит в заблуждение. random(f,3) наборы f в случайный полином степени меньше, чем 3. SetCoeff(f, 3) устанавливает коэффициент в 1 и после этого это многочлен степени 3.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]