Тест на простоту Ферма - Fermat primality test

В Тест на простоту Ферма это вероятностный тест, чтобы определить, является ли число вероятный прайм.

Концепция

Маленькая теорема Ферма заявляет, что если п прост и а не делится на п, тогда

Если кто-то хочет проверить, действительно ли п простое, то мы можем выбрать случайные целые числа а не делится на п и посмотрим, выполняется ли равенство. Если равенство не выполняется для значения а, тогда п составное. Это сравнение вряд ли справедливо для случайного а если п составной.[1]Следовательно, если равенство действительно выполняется для одного или нескольких значений а, то мы говорим, что п является наверное премьер.

Однако обратите внимание, что для , указанное выше сравнение выполняется тривиально, а также тривиально, если п это странно и .По этой причине обычно выбирают число а в интервале .

Любые а такой, что

когда п составной а известен как Ферма лжец. В таком случае п называется Псевдопросто Ферма основать а.

Если мы выберем а такой, что

тогда а известен как Свидетель Ферма за составность п.

пример

Предположим, мы хотим определить, п = 221 простое число. Случайно выбрать 1 < а <221, скажем а = 38. Проверяем указанное выше равенство и находим, что оно выполняется:

Либо 221 - простое число, либо 38 - лжец Ферма, поэтому берем другой а, скажем 24:

Итак, 221 составной, а 38 действительно был лжецом Ферма. Кроме того, 24 - свидетельство Ферма о составности 221.

Алгоритм

Алгоритм можно записать следующим образом:

Входы: п: значение для проверки на простоту, п>3; k: параметр, определяющий количество проверок на простоту
Вывод: составной если п составной, иначе наверное премьер
Повторение k раз:
Выбирать а случайно в диапазоне [2, п − 2]
Если , затем вернитесь составной
Если составной никогда не возвращается: вернуть наверное премьер

В а значения 1 и п-1 не используются, поскольку равенство выполняется для всех п и все странно п соответственно, поэтому их тестирование не добавляет ценности.

Сложность

Использование быстрых алгоритмов для модульное возведение в степень и умножения с высокой точностью, время работы этого алгоритма равно О (k журнал2п журнал журнал п) = Õ (k журнал2п), где k это количество раз, когда мы проверяем случайный а, и п это значение, которое мы хотим проверить на простоту; увидеть Тест на простоту Миллера – Рабина для подробностей.

Недостаток

Во-первых, их бесконечно много Псевдопримеси Ферма.

Более серьезный недостаток состоит в том, что существует бесконечно много Числа Кармайкла. Это числа для которого все ценности с участием Ферма лжецы. Для этих чисел повторное применение теста простоты Ферма работает так же, как простой случайный поиск факторов. Хотя числа Кармайкла значительно реже, чем простые числа (верхняя граница Эрдеша для числа чисел Кармайкла ниже, чем функция простых чисел n / log (n) )[2] их достаточно, чтобы критерий простоты Ферма не часто использовался в приведенной выше форме. Вместо этого другие более мощные расширения теста Ферма, такие как Бэйли – PSW, Миллер – Рабин, и Соловей-Штрассен используются чаще.

В общем, если составное число, не являющееся числом Кармайкла, то по крайней мере половина всех

(т.е. )

являются свидетелями Ферма. Для доказательства пусть быть свидетелем Ферма и , , ..., быть Ферма лжецами. потом

и так все для являются свидетелями Ферма.

Приложения

Как упоминалось выше, большинство приложений используют Миллер – Рабин или Бэйли – PSW тест на примитивность. Иногда сначала выполняется тест Ферма (вместе с некоторым пробным делением на маленькие простые числа) для повышения производительности. GMP начиная с версии 3.0 использует тест Ферма по основанию 210 после пробного деления и перед запуском тестов Миллера – Рабина. Libgcrypt использует аналогичный процесс с основанием 2 для теста Ферма, но OpenSSL не.

На практике с большинством библиотек с большими числами, такими как GMP, тест Ферма не заметно быстрее теста Миллера – Рабина и может быть медленнее для многих входных данных.[3]

В качестве исключения OpenPFGW использует только тест Ферма для проверки вероятного простого числа. Программа обычно используется с многозначными входами с целью максимальной скорости с очень большими входами. Еще одна хорошо известная программа, которая полагается только на тест Ферма, - это PGP где он используется только для тестирования самогенерируемых больших случайных значений (аналог с открытым исходным кодом, GNU Privacy Guard, использует предварительный тест Ферма с последующими тестами Миллера – Рабина).

использованная литература

  • Томас Х. Кормен, Чарльз Э. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн (2001). «Раздел 31.8: Проверка первичности». Введение в алгоритмы (Второе изд.). MIT Press; Макгроу-Хилл. п. 889–890. ISBN  0-262-03293-7.CS1 maint: несколько имен: список авторов (ссылка на сайт)
  1. ^ Карл Померанс; Джон Л. Селфридж; Сэмюэл С. Вагстафф-мл. (Июль 1980 г.). «Псевдопреступности до 25 · 109" (PDF). Математика вычислений. 35 (151): 1003–1026. Дои:10.1090 / S0025-5718-1980-0572872-7. JSTOR  2006210.
  2. ^ Пол Эрдёш (1956). «О псевдопростых числах и числах Кармайкла». Publ. Математика. Дебрецен. 4: 201–206.
  3. ^ Джо Херд (2003), Проверка вероятностного критерия простоты Миллера – Рабина., п. 2, CiteSeerX  10.1.1.105.3196