В теории конечных полей , разделе математики , примитивный многочлен — это минимальный многочлен примитивного элемента конечного поля GF ( p m ) . Это означает, что многочлен F ( X ) степени m с коэффициентами в GF( p ) = Z / p Z является примитивным многочленом , если он является моническим и имеет корень α в GF( p m ) такой, что — все поле GF( p m ) . Это означает, что α является примитивным ( p m − 1 )-корнем единицы в GF( p m ) .
Над GF(3) многочлен x 2 + 1 неприводим, но не примитивен, поскольку делит x 4 − 1 : его корни порождают циклическую группу порядка 4, в то время как мультипликативная группа GF(3 2 ) является циклической группой порядка 8. Многочлен x 2 + 2 x + 2 , с другой стороны, примитивен. Обозначим один из его корней через α . Тогда, поскольку натуральные числа, меньшие и взаимно простые с 3 2 − 1 = 8, равны 1, 3, 5 и 7, четыре примитивных корня в GF(3 2 ) равны α , α 3 = 2 α + 1 , α 5 = 2 α и α 7 = α + 2 . Первообразные корни α и α 3 алгебраически сопряжены. Действительно, x 2 + 2 x + 2 = ( x − α ) ( x − (2 α + 1)) . Оставшиеся примитивные корни α 5 и α 7 = ( α 5 ) 3 также алгебраически сопряжены и дают второй примитивный многочлен: x 2 + x + 2 = ( x − 2 α ) ( x − ( α + 2)) .
Для степени 3 GF(3 3 ) имеет φ (3 3 − 1) = φ (26) = 12 примитивных элементов. Поскольку каждый примитивный многочлен степени 3 имеет три корня, все обязательно примитивные, имеется 12 / 3 = 4 примитивных многочлена степени 3. Один примитивный многочлен равен x 3 + 2 x + 1 . Обозначив один из его корней через γ , алгебраически сопряженными элементами будут γ 3 и γ 9 . Другие примитивные многочлены связаны с алгебраически сопряженными множествами, построенными на других примитивных элементах γ r , где r взаимно просто с 26:
Примитивные многочлены могут быть использованы для представления элементов конечного поля . Если α в GF( p m ) является корнем примитивного многочлена F ( x ), то ненулевые элементы GF( p m ) представляются как последовательные степени α :
Это позволяет экономически эффективно представить в компьютере ненулевые элементы конечного поля, представив элемент соответствующим показателем степени. Это представление упрощает умножение, поскольку соответствует сложению показателей степени по модулю.
Примитивные полиномы над GF(2), полем с двумя элементами, могут быть использованы для псевдослучайной генерации бит . Фактически, каждый регистр сдвига с линейной обратной связью с максимальной длиной цикла (которая равна 2 n − 1 , где n — длина регистра сдвига с линейной обратной связью) может быть построен из примитивного полинома. [2]
В общем случае для примитивного многочлена степени m над GF(2) этот процесс сгенерирует 2 m − 1 псевдослучайных битов перед повторением той же последовательности.
Циклический избыточный код (CRC) — это код обнаружения ошибок, который работает, интерпретируя битовую строку сообщения как коэффициенты полинома над GF(2) и делит ее на фиксированный генераторный полином также над GF(2); см. Математика CRC . Примитивные полиномы или их кратные иногда являются хорошим выбором для генераторных полиномов, поскольку они могут надежно обнаруживать две битовые ошибки, которые происходят далеко друг от друга в битовой строке сообщения, вплоть до расстояния 2 n − 1 для примитивного полинома степени n .
Полезным классом примитивных многочленов являются примитивные трехчлены, имеющие только три ненулевых члена: x r + x k + 1. Их простота позволяет создавать особенно маленькие и быстрые линейные регистры сдвига с обратной связью . [3] Ряд результатов дает методы для поиска и проверки примитивности трехчленов. [4]
Для многочленов над GF(2), где 2 r − 1 является простым числом Мерсенна , многочлен степени r является примитивным тогда и только тогда, когда он неприводим. (Для неприводимого многочлена он не является примитивным, только если период x является нетривиальным множителем 2 r − 1. Простые числа не имеют нетривиальных множителей.) Хотя генератор псевдослучайных чисел Mersenne Twister не использует трехчлен, он использует это преимущество.
Ричард Брент табулировал примитивные трехчлены этой формы, такие как x 74207281 + x 30684570 + 1 . [5] [6] Это можно использовать для создания генератора псевдослучайных чисел огромного периода 2 74207281 − 1 ≈3 × 10 22 338 617 .