Xaositect писал(а):
Можно воспользоваться тем, что
,
- неприводимый многочлен
-й степени. Тогда элементы
можно хранить как набор коэффициентов многочлена. И как глобальную переменную или константу хранить многочлен f.
C
достаточно просто - элемент поля представляется в виде
битов - коэффициентов многочлена и операции можно реализовать через побитовые операции над целыми числами.
Где найти алгоритм построения неприводимого многочлена размерности
над полем
?
В классической монографии Р.Лидл, Г.Нидеррайтер. Конечные поля.
Другой вариант - подобрать неприводимый многочлен методом научного тыка.
С учетом того, что неприводимых полиномов много довольно много, а алгоритм Берлекэмпа (проверки на неприводимость) работает очень быстро, этот способ вполне эффективен.
Кстати, у Лидла с Нидеррайтером в приложениях есть таблицы неприводимых полиномов.
Наконец, в некоторых системах компьютерной алгебры, например, в Maple есть готовые библитеки для работы сконечными полями. Задавая конечное поле можно заранее указать, наряду с
и
, неприводимый полином. А можно этого и не делать. Тогда Maple предложит свой вариант.
-- 19 май 2009, 02:33 --Если действовать методом, который я предложил изначально:
В общем случае можно некоторым образом построить поле, поставить ему в соответствие таблицу сложения и умножения и работать с ними. Но хотелось бы увидеть более простой способ работы с элементами поля.
то какой самый простой алгоритм построения конечного поля (построения 2-х таблиц)?
Учитывая простоту выполнения сложения в любом конечном поле, хранить таблицу сложения - странное решение.
Умножение в представлении с помощью полиномиального базиса (представление с помощью первообразного корня прекрасно годится для умножения, но неудобно для выполнения сложения) тоже выполняется не слишком долго. Но если критично быстродействие, а не память, то, разумеется можно и таблицу построить. Опять таки с помощью уже упомянутых представлений. Или других. Например, матричного.