Там код написан с использованием библиотеки 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 в этом случае?
Ваш вопрос немного сложен для понимания. Если я вас правильно понимаю, вопрос в том, как интерпретировать представление 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)
устанавливает коэффициент Y³
в 1
и после этого это многочлен степени 3.
Других решений пока нет …