Тест на простоту Ферма
Тест на простоту Ферма — это вероятностный тест, позволяющий определить, является ли число вероятным простым .
Концепция [ править ]
Маленькая теорема Ферма утверждает, что если p — простое число и a не делится на p , то
Если кто-то хочет проверить, является ли p простым, мы можем выбрать случайные целые числа a, не делящиеся на p , и посмотреть, выполняется ли сравнение. Если это не выполняется для значения a , то p является составным. Это сравнение вряд ли будет выполняться для случайного a, если p составное. [1] Следовательно, если равенство действительно выполняется для одного или нескольких значений a , то мы говорим, что p , вероятно, является простым .
Однако заметим, что приведенное выше сравнение тривиально выполняется для , поскольку отношение сравнения совместимо с возведением в степень . Это также тривиально справедливо для если p нечетно, по той же причине. Вот почему обычно выбирают случайное значение a в интервале .
Любое такое , что
когда n является составным, известен как лжец Ферма . В этом случае n называется псевдопростым по Ферма по основанию a .
Если мы выберем такое , что
тогда a известен как свидетель Ферма составности n .
Пример [ править ]
Предположим, мы хотим определить, является ли число n = 221 простым. Случайным образом выберите 1 < a < 220, скажем a = 38. Мы проверяем приведенное выше сравнение и обнаруживаем, что оно выполняется:
Либо 221 — простое число, либо 38 — это лжец Ферма, поэтому берём ещё одно число , скажем 24:
Итак, 221 является составным, а 38 действительно был лжецом Ферма. Более того, 24 является свидетелем Ферма составности 221.
Алгоритм [ править ]
Алгоритм можно записать следующим образом:
- Входные данные : n : значение для проверки на простоту, n >3; k : параметр, определяющий количество раз проверки на простоту
- Выход : составной, если n составной, в противном случае, вероятно, простое число.
- Повторите k раз:
- Выберите случайное число в диапазоне [2, n − 2]
- Если , затем верните составной
- Если составное число никогда не возвращается: возврат, вероятно, простое число
Значения a 1 и n -1 не используются, поскольку равенство справедливо для всех n и всех нечетных n соответственно, поэтому их проверка не добавляет никакой ценности.
Сложность [ править ]
При использовании быстрых алгоритмов модульного возведения в степень и умножения с множественной точностью время работы этого алгоритма составляет O ( k log 2 n log log n ) = Õ ( k log 2 n ) , где k — количество раз, которое мы проверяем случайное значение a , а n — значение, которое мы хотим проверить на простоту; см . в тесте простоты Миллера – Рабина подробности .
Недостаток [ править ]
> 1 существует бесконечно много псевдопростых чисел Ферма Для любого базиса a . [1] : Теорема 1 бесконечно много Хуже того, чисел Кармайкла . [2] Это цифры для которого все значения с Ферма лжецы. Для этих чисел повторное применение теста простоты Ферма работает так же, как простой случайный поиск факторов. Хотя числа Кармайкла встречаются существенно реже, чем простые числа (верхняя граница Эрдеша для числа чисел Кармайкла [3] меньше, чем функция простых чисел n/log(n) ), их достаточно, поэтому критерий простоты Ферма не часто используется в приведенной выше форме. другие, более мощные расширения теста Ферма, такие как Бейли-ПСВ , Миллера-Рабина и Соловея-Штрассена Вместо этого чаще используются .
В общем, если — составное число, не являющееся числом Кармайкла, то не менее половины всех
- (т.е. )
являются свидетелями Ферма. Для доказательства этого пусть быть свидетелем Ферма и , , ..., будьте Ферма лжецами. Затем
и так все для являются свидетелями Ферма.
Приложения [ править ]
Как упоминалось выше, в большинстве приложений для определения простоты используются тесты Миллера-Рабина или Бэйли-ПСВ . Иногда для повышения производительности сначала выполняется тест Ферма (наряду с пробным делением на маленькие простые числа). GMP, начиная с версии 3.0, использует тест Ферма по основанию 210 после пробного деления и перед запуском тестов Миллера-Рабина. Libgcrypt использует аналогичный процесс с базой 2 для теста Ферма, но OpenSSL этого не делает.
На практике с большинством библиотек больших чисел, таких как GMP, тест Ферма не намного быстрее, чем тест Миллера-Рабина, и может быть медленнее для многих входных данных. [4]
В качестве исключения OpenPFGW использует только тест Ферма для проверки вероятности простого числа. Программа обычно используется с многотысячными входными данными с целью достижения максимальной скорости при очень больших входных данных. Другая хорошо известная программа, которая полагается только на тест Ферма, — это PGP , где она используется только для тестирования самостоятельно сгенерированных больших случайных значений (аналог с открытым исходным кодом, GNU Privacy Guard , использует предварительный тест Ферма, за которым следуют тесты Миллера-Рабина).
Ссылки [ править ]
- ↑ Перейти обратно: Перейти обратно: а б Карл Померанс ; Джон Л. Селфридж ; Сэмюэл С. Вагстафф-младший (июль 1980 г.). «Псевдопростые числа до 25·10 9 Математика (PDF) . вычислений . 35 (151): 1003–1026. doi : 10.1090/S0025-5718-1980-0572872-7 . JSTOR 2006210 .
- ^ Алфорд, WR ; Гранвилл, Эндрю ; Померанс, Карл (1994). «Чисел Кармайкла бесконечно много» (PDF) . Анналы математики . 140 (3): 703–722. дои : 10.2307/2118576 . JSTOR 2118576 .
- ^ Пол Эрдеш (1956). «О псевдопростых числах и числах Кармайкла». Опубл. Математика. Дебрецен . 4 : 201–206. МР 0079031 .
- ^ Джо Херд (2003), Проверка вероятностного теста на простоту Миллера-Рабина , стр. 2, CiteSeerX 10.1.1.105.3196
- Томас Х. Кормен , Чарльз Э. Лейзерсон , Рональд Л. Ривест , Клиффорд Стейн (2001). «Раздел 31.8: Тестирование на примитивность». Введение в алгоритмы (второе изд.). Массачусетский технологический институт Пресс; МакГроу-Хилл. п. 889–890. ISBN 0-262-03293-7 .
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка )