Тест на примитивность
Тест на простоту — это алгоритм определения того, является ли входное число простым . Среди других областей математики он используется для криптографии . В отличие от факторизации целых чисел , тесты на простоту обычно не дают простых множителей , а лишь указывают, является ли входное число простым или нет. Факторизация считается сложной в вычислительном отношении проблемой, тогда как проверка на простоту сравнительно проста ( время ее выполнения полиномиально зависит от размера входных данных). Некоторые тесты на простоту доказывают, что число простое, в то время как другие, такие как Миллер-Рабин, доказывают, что число является составным . Следовательно, последние правильнее было бы называть тестами на составность, а не тестами на простоту.
Простые методы
[ редактировать ]Самый простой тест на простоту — это пробное деление : по заданному входному числу ли оно , проверьте, делится на любое простое число от 2 до (т.е. не оставляет ли деление остатка ). Если так, то является составным . В противном случае это просто. [ 1 ] Для любого делителя , должен быть еще один делитель и простой делитель из , и поэтому ищем не более простых делителей достаточно.
Например, рассмотрим число 100, делителями которого являются следующие числа:
- 1, 2, 4, 5, 10, 20, 25, 50, 100.
Когда все возможные делители до проверяются, некоторые делители будут обнаружены дважды . Чтобы это заметить, рассмотрим список пар делителей 100:
- .
Продукты прошлого являются противоположностью продуктов, появившихся ранее. Например, и являются противоположностью друг друга. Далее, соотношение двух делителей и . Это наблюдение распространяется на все : все пары делителей содержат делитель, меньший или равный , поэтому алгоритму нужно искать только делители, меньшие или равные чтобы гарантировать обнаружение всех пар делителей. [ 1 ]
Кроме того, 2 — простое число, делящее 100, что сразу доказывает, что 100 не является простым числом. каждое положительное целое число, кроме 1, делится хотя бы на одно простое число Согласно основной теореме арифметики . Следовательно, алгоритму нужно искать только простые делители, меньшие или равные .
В качестве другого примера рассмотрим, как этот алгоритм определяет простоту числа 17. , и единственные простые числа являются 2 и 3. Ни одно из них не делит 17, что доказывает, что 17 — простое число. В качестве последнего примера рассмотрим число 221. Имеем , и простые числа равны 2, 3, 5, 7, 11 и 13. Проверив каждое, обнаруживается, что , доказывая, что 221 не является простым числом.
В тех случаях, когда невозможно вычислить список простых чисел , также можно просто (и медленно) проверить все числа между и для делителей. Довольно простая оптимизация заключается в проверке делимости на 2 и только на нечетные числа между 3 и 3. , поскольку из делимости на четное число следует деление на 2.
Этот метод можно усовершенствовать и дальше. Обратите внимание, что все простые числа больше 3 имеют вид для неотрицательного целого числа и . Действительно, каждое целое число имеет вид для положительного целого числа и . Поскольку 2 деления , и , и 3 деления и , единственные возможные остатки по модулю 6 для простого числа больше 3 — это 1 и 5. Таким образом, более эффективный тест на простоту для состоит в том, чтобы проверить, является ли делится на 2 или 3, а затем проверить все числа вида и которые . Это почти в три раза быстрее, чем проверка всех чисел до .
Обобщая далее, все простые числа, большие ( c primorial ) имеют вид для положительные целые числа, , и взаимно простой с . Например, рассмотрим . Все целые числа имеют вид для целые числа с . Теперь 2 деления , 3 деления , и 5 делит . Таким образом, все простые числа больше 30 имеют вид для . Конечно, не все числа вида с взаимно простой с являются простыми. Например, не является простым, хотя 17 взаимно просто .
Как растет, доля взаимно простых остатков к остаткам уменьшается, и поэтому время проверки уменьшается (хотя проверять делимость на все простые числа, меньшие ). Наблюдения, аналогичные предыдущим, можно применить рекурсивно , получив Решето Эратосфена .
Один из способов ускорить эти методы (и все остальные, упомянутые ниже) — предварительно вычислить и сохранить список всех простых чисел до определенной границы, например, всех простых чисел до 200. (Такой список можно вычислить с помощью Решето Эратосфена или алгоритм, проверяющий каждое приращение против всех известных простых чисел ). Тогда перед тестированием для простоты крупномасштабным методом, можно сначала проверить на делимость на любое простое число из списка. Если оно делится на любое из этих чисел, то оно составное, и любые дальнейшие проверки можно пропустить.
Простой, но очень неэффективный тест на простоту использует теорему Вильсона , которая утверждает, что является простым тогда и только тогда, когда:
Хотя этот метод требует около модульные умножения, что делает их непрактичными, теоремы о простых числах и модульных остатках составляют основу многих более практических методов.
Эвристические тесты
[ редактировать ]Это тесты, которые, кажется, хорошо работают на практике, но не проверены и, следовательно, с технической точки зрения вообще не являются алгоритмами. они очень Тест Ферма и тест Фибоначчи — простые примеры, и в сочетании эффективны. Джон Селфридж предположил, что если p — нечетное число и p ≡ ±2 (по модулю 5), то p будет простым, если выполняются оба следующих условия:
- 2 р -1 ≡ 1 (по модулю p ),
- f p +1 ≡ 0 (mod p ),
где fk – е k - число Фибоначчи . Первое условие — это критерий простоты Ферма по основанию 2.
В общем случае, если p ≡ a (mod x 2 +4), где a — квадратичный невычет (mod x 2 +4) то p должно быть простым, если выполняются следующие условия:
- 2 р -1 ≡ 1 (по модулю p ),
- ж ( 1 ) п +1 ≡ 0 (мод р ),
f ( x ) k — k - й полином Фибоначчи в точке x .
Селфридж, Карл Померанс и Сэмюэл Вагстафф вместе предлагают 620 долларов за контрпример. [ 2 ]
Вероятностные тесты
[ редактировать ]Вероятностные тесты более строгие, чем эвристики, поскольку они обеспечивают доказуемые границы вероятности быть обманутым составным числом. Многие популярные тесты на простоту являются вероятностными тестами. В этих тестах, помимо проверяемого числа n , используются некоторые другие числа a, которые выбираются случайным образом из некоторого выборочного пространства ; обычные рандомизированные тесты на простоту никогда не сообщают о простом числе как о составном, но составное число может быть указано как простое. Вероятность ошибки можно уменьшить, повторяя тест с несколькими независимо выбранными значениями a ; часто используемых тестов для любого составного n по крайней мере половина a обнаруживает составность n для двух , поэтому k повторений уменьшают вероятность ошибки не более чем до 2 - к , который можно сделать сколь угодно малым, увеличив k .
Базовая структура рандомизированных тестов на простоту выглядит следующим образом:
- Случайным образом выберите число a .
- Проверить равенство (соответствующее выбранному критерию) числа a и заданного числа n . Если равенство не выполняется, то n — составное число, а a — свидетель составности, и тест прекращается.
- Возвращайтесь к первому шагу, пока не будет достигнута требуемая точность.
Если после одной или нескольких итераций n не окажется составным числом, его можно объявить, вероятно, простым .
Тест на простоту Ферма
[ редактировать ]Самый простой вероятностный тест простоты — это тест простоты Ферма (фактически тест на составность). Это работает следующим образом:
- Учитывая целое число n , выберите некоторое целое число, взаимно простое с n , и вычислите н − 1 по модулю н . Если результат отличается от 1, то n составное. Если это 1, то n может быть простым.
Если н −1 (по модулю n ) равно 1, но n не является простым, тогда n называется псевдопростое, основать . чтобы На практике, если а н −1 (по модулю n ) равно 1, то n обычно простое. Но вот контрпример: если n = 341 и a = 2, то
хотя 341 = 11·31 является составным. Фактически, 341 — это наименьшее псевдопростое число по основанию 2 (см. рис. 1). [ 3 ] ).
Существует только 21853 псевдопростых числа по основанию 2, размер которых меньше 2,5 × 10. 10 (см. стр. 1005 [ 3 ] ). Это означает, что для n до 2,5 × 10 10 , если 2 н −1 (по модулю n ) равно 1, то n является простым, если только n не является одним из этих 21853 псевдопростых чисел.
Некоторые составные числа ( числа Кармайкла ) обладают тем свойством, что н − 1 равен 1 (по модулю n ) для каждого a , взаимно простого с n . Самый маленький пример — n = 561 = 3·11·17, для которого 560 равно 1 (по модулю 561) для всех чисел, взаимно простых с 561. Тем не менее, тест Ферма часто используется, если необходим быстрый просмотр чисел, например, на этапе генерации ключа криптографического алгоритма с открытым ключом RSA .
Критерий простоты Миллера-Рабина и Соловея-Штрассена
[ редактировать ]Критерий простоты Миллера-Рабина и критерий простоты Соловея-Штрассена представляют собой более сложные варианты, которые обнаруживают все составные числа (еще раз это означает: для каждого составного числа n не менее 3/4 (Миллер-Рабина) или 1/2 (Соловей –Штрассен) чисел a являются свидетелями составности n ). Это также тесты на составность.
Критерий простоты Миллера-Рабина работает следующим образом: Учитывая целое число n , выберите некоторое положительное целое число a < n . Пусть 2 с d = n − 1, где d нечетно. Если
и
- для всех
тогда n составное и a является свидетелем составности. В противном случае n может быть простым, а может и не быть простым. Критерий Миллера-Рабина является сильным вероятностным простым критерием (см. PSW [ 3 ] стр. 1004).
Тест на простоту Соловея – Штрассена использует другое равенство: учитывая нечетное число n , выберите некоторое целое число a < n , если
- , где это символ Якоби ,
тогда n составное и a является свидетелем составности. В противном случае n может быть простым, а может и не быть простым. Критерий Соловея – Штрассена представляет собой тест Эйлера на вероятность простых чисел (см. PSW [ 3 ] стр. 1003).
Для каждого отдельного значения критерий Соловея-Штрассена слабее критерия Миллера-Рабина. Например, если n = 1905 и a = 2, то критерий Миллера-Рабина показывает, что n является составным, а критерий Соловея-Штрассена - нет. Это потому, что 1905 год — это Эйлер. псевдопростое основание 2, но не сильное псевдопростое основание 2 (это показано на рисунке 1 PSW [ 3 ] ).
Тест на простоту Фробениуса
[ редактировать ]Критерии простоты Миллера-Рабина и Соловея-Штрассена просты и работают намного быстрее, чем другие общие тесты простоты. Одним из методов дальнейшего повышения эффективности в некоторых случаях является тест псевдопростоты Фробениуса ; Раунд этого теста занимает примерно в три раза больше времени, чем раунд Миллера-Рабина, но достигается граница вероятности, сравнимая с семью раундами Миллера-Рабина.
Тест Фробениуса является обобщением теста Люка на вероятность простых чисел .
Тест на простоту Бэйли – PSW
[ редактировать ]Тест простоты Бэйли-ПСВ — это вероятностный тест простоты, который сочетает в себе тест Ферма или Миллера-Рабина с тестом вероятного простого числа Лукаса для получения теста простоты, не имеющего известных контрпримеров. То есть не существует известных составных n , для которых этот тест показал бы, что n , вероятно, простое. [ 4 ] [ 5 ] Показано, что для n нет контрпримеров. .
Другие тесты
[ редактировать ]Леонард Адлеман и Минг-Де Хуанг представили безошибочный (но с ожидаемым полиномиальным временем) вариант теста на простоту эллиптической кривой . В отличие от других вероятностных тестов, этот алгоритм выдает сертификат простоты и, таким образом, может использоваться для доказательства того, что число является простым. [ 6 ] На практике алгоритм непомерно медленный.
Если бы были доступны квантовые компьютеры , простоту можно было бы проверять асимптотически быстрее, чем с помощью классических компьютеров. Сочетание алгоритма Шора , метода факторизации целых чисел, с тестом на простоту Поклингтона могло бы решить проблему в . [ 7 ]
Быстрые детерминированные тесты
[ редактировать ]Ближе к началу 20-го века было показано, что следствие малой теоремы Ферма можно использовать для проверки простоты. [ 8 ] В результате появился тест на простоту Поклингтона . [ 9 ] Однако, поскольку этот тест требует частичной факторизации n - 1 , время выполнения в худшем случае все равно было довольно медленным. Первым детерминистическим тестом на простоту, значительно более быстрым, чем наивные методы, был тест циклотомии ; можно доказать, что его время выполнения равно O ((log n ) c журнал журнал журнал n ), где n — число, которое нужно проверить на простоту, а c — константа, независимая от n . Было сделано множество дальнейших улучшений, но ни одно из них не имело полиномиального времени работы. (Время выполнения измеряется размером входных данных, который в данном случае равен ~ log n , то есть количеству битов, необходимых для представления числа n .) тест на простоту эллиптической кривой Можно доказать, что выполняется за O( (журнал n ) 6 ), если некоторые гипотезы аналитической теории чисел верны. [ который? ] Аналогичным образом, согласно обобщенной гипотезе Римана , можно доказать, что детерминированный критерий Миллера , который составляет основу вероятностного теста Миллера-Рабина, работает в Õ ((log n ) 4 ). [ 10 ] На практике этот алгоритм медленнее, чем два других, для чисел, с которыми вообще можно иметь дело. Поскольку реализация этих двух методов довольно сложна и создает риск ошибок программирования, часто предпочитаются более медленные, но более простые тесты.
изобрели первый доказуемо безусловный детерминированный полиномиальный временной тест на простоту В 2002 году Маниндра Агравал , Нирадж Каял и Нитин Саксена . Тест простоты AKS выполняется за Õ((log n ) 12 ) (улучшено до Õ((log n ) 7.5 ) [ 11 ] в опубликованной версии их статьи), что в дальнейшем можно свести к Õ((log n ) 6 ), если гипотеза Софи Жермен верна. [ 12 ] Впоследствии Ленстра и Померанс представили версию теста, работающую во времени Õ((log n ) 6 ) безоговорочно. [ 13 ]
Агравал, Каял и Саксена предлагают вариант своего алгоритма, который будет работать за Õ((log n ) 3 ) если гипотеза Агравала верна; однако эвристический аргумент Хендрика Ленстры и Карла Померанса предполагает, что это, вероятно, неверно. [ 11 ] Модифицированная версия гипотезы Агравала, гипотеза Агравала-Поповича, [ 14 ] может все еще быть правдой.
Сложность
[ редактировать ]В теории сложности вычислений формальный язык, соответствующий простым числам, обозначается ПРОСТЫМИ числами. Легко показать, что ПРОСТОЕ находится в Co-NP : его дополнение КОМПОЗИТЫ находится в NP, потому что можно определить составность, недетерминированно угадывая фактор.
В 1975 году Воан Пратт показал, что существует сертификат простоты, который можно проверить за полиномиальное время, и, таким образом, PRIMES находится в NP и, следовательно, в . см. в сертификате первичности Подробную информацию .
Последующее открытие алгоритмов Соловея-Штрассена и Миллера-Рабина поместило PRIMES в coRP . В 1992 году алгоритм Адлемана – Хуанга [ 6 ] снизил сложность до , что заменило результат Пратта.
Тест на простоту Адлемана -Померанса-Румели от 1983 года поместил ПРОСТОТЫ в QP ( квазиполиномиальное время ), которое, как известно, не сравнимо с классами, упомянутыми выше.
Из-за его практичности, алгоритмов с полиномиальным временем, предполагающих гипотезу Римана, и других подобных доказательств, долгое время подозревалось, но не было доказано, что простота может быть решена за полиномиальное время. Существование теста на простоту AKS наконец решило этот давний вопрос и поместило PRIMES в P . Однако неизвестно, является ли PRIMES P-полным , и неизвестно, принадлежит ли он классам, лежащим внутри , таким как NC или L. P Известно, что ПРАЙМСА нет в AC 0 . [ 15 ]
Теоретико-числовые методы
[ редактировать ]Существуют определенные теоретико-числовые методы проверки того, является ли число простым, например тест Лукаса и тест Прота . Эти тесты обычно требуют факторизации n + 1, n - 1 или аналогичной величины, что означает, что они бесполезны для проверки простоты общего назначения, но они часто весьма эффективны, когда известно, что тестируемое число n имеет специальное число. форма.
Тест Люка основан на том факте, что мультипликативный порядок числа a по модулю n равен n - 1 для простого числа n , когда a является примитивным корнем по модулю n . Если мы можем показать, что a является примитивным для n , мы можем показать, что n является простым.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Ризель (1994), стр. 2-3.
- ^ Джон Селфридж#Гипотеза Селфриджа о тестировании на простоту .
- ^ Перейти обратно: а б с д и Померанс, Карл ; Селфридж, Джон Л .; Вагстафф, Сэмюэл С. младший (июль 1980 г.). «Псевдопростые числа до 25·10 9 Математика (PDF) . вычислений . 35 (151): 1003–1026. doi : 10.1090/S0025-5718-1980-0572872-7 .
- ^ Бэйли, Роберт; Вагстафф, Сэмюэл С. младший (октябрь 1980 г.). «Лукас Псевдопраймс» (PDF) . Математика вычислений . 35 (152): 1391–1417. дои : 10.1090/S0025-5718-1980-0583518-6 . МР 0583518 .
- ^ Бэйли, Роберт; Фиори, Эндрю; Вагстафф, Сэмюэл С. младший (июль 2021 г.). «Усиление теста на первичность Бэйли-PSW». Математика вычислений . 90 (330): 1931–1955. arXiv : 2006.14425 . дои : 10.1090/mcom/3616 . S2CID 220055722 .
- ^ Перейти обратно: а б Адлеман, Леонард М .; Хуан, Мин-Де (1992). Проверка простоты и абелевы многообразия над конечным полем . Конспекты лекций по математике. Том. 1512. Шпрингер-Верлаг . ISBN 3-540-55308-8 .
- ^ Чау, ХФ; Ло, Х.-К. (1995). «Тест на простоту посредством квантовой факторизации». arXiv : Quant-ph/9508005 .
- ^ Поклингтон, ХК (1914). «Определение простой или составной природы больших чисел по теореме Ферма». Камбр. Фил. Соц. Проц . 18 :29–30. ЖФМ 45.1250.02 .
- ^ Вайсштейн, Эрик В. «Теорема Поклингтона» . Математический мир .
- ^ Гэри Л. Миллер (1976). «Гипотеза Римана и тесты на первичность» . Журнал компьютерных и системных наук . 13 (3): 300–317. дои : 10.1016/S0022-0000(76)80043-8 .
- ^ Перейти обратно: а б Агравал, Маниндра; Каял, Нирадж; Саксена, Нитин (2004). «Простые числа находятся в P» (PDF ) Анналы математики 160 (2): 781–793. дои : 10.4007/анналы.2004.160.781 .
- ^ Агравал, Маниндра; Каял, Нирадж; Саксена, Нитин (2004). «ПРАЙМС находится в P» (PDF ) Анналы математики 160 (2): 781–793. дои : 10.4007/анналы.2004.160.781 .
- ^ Карл Померанс и Хендрик В. Ленстра (20 июля 2005 г.). «Тестирование простоты с гауссовскими периодами» (PDF) .
- ^ Попович Роман (30 декабря 2008 г.). «Заметка о гипотезе Агравала» (PDF) .
- ^ Аллендер, Эрик; Сакс, Майкл; Шпарлинский, Игорь (2001). «Нижняя граница примитивности» . Журнал компьютерных и системных наук . 62 (2): 356–366. дои : 10.1006/jcss.2000.1725 .
Источники
[ редактировать ]- Крэндалл, Ричард ; Померанс, Карл (2005). Простые числа: вычислительная перспектива (2-е изд.). Спрингер. ISBN 0-387-25282-7 . Глава 3: Распознавание простых и составных чисел, стр. 109–158. Глава 4: Доказательство первичности, стр. 159–190. Раздел 7.6: Доказательство простоты эллиптических кривых (ECPP), стр. 334–340.
- Кнут, Дональд (1997). «раздел 4.5.4». Искусство компьютерного программирования . Том. 2: Получисловые алгоритмы (3-е изд.). Аддисон-Уэсли. стр. 391–396. ISBN 0-201-89684-2 .
- Кормен, Томас Х .; Лейзерсон, Чарльз Э .; Ривест, Рональд Л .; Штейн, Клиффорд (2001). «Раздел 31.8: Тестирование на примитивность». Введение в алгоритмы (второе изд.). MIT Press, МакГроу-Хилл. стр. 887–896. ISBN 0-262-03293-7 .
- Пападимитриу, Христос Х. (1993). «Раздел 10.2: Первичность». Вычислительная сложность (1-е изд.). Эддисон Уэсли. стр. 222–227 . ISBN 0-201-53082-1 . Збл 0833.68049 .
- Ризель, Ганс (1994). Простые числа и компьютерные методы факторизации . Прогресс в математике. Том. 126 (второе изд.). Бостон, Массачусетс: Биркхойзер. ISBN 0-8176-3743-5 . Збл 0821.11001 .
Внешние ссылки
[ редактировать ]- Соловей-Штрассен (computacion.cs.cinvestav.mx) в archive.today (архивировано 20 декабря 2012 г.) - Реализация теста простоты Соловея-Штрассена в Maple
- Отличие простых чисел от составных чисел, DJ Bernstein (cr.yp.to)
- Прайм-страницы (primes.utm.edu)
- Тест Лукаса на простоту с факторизованным N - 1 (MathPages.com) в веб-архивах Библиотеки Конгресса (заархивировано 6 августа 2010 г.)
- PRIMABOINCA — это исследовательский проект, в котором компьютеры, подключенные к Интернету, используются для поиска контрпримеров некоторым гипотезам. Первая гипотеза ( гипотеза Агравала ) послужила основой для формулировки первого детерминированного алгоритма простого теста за полиномиальное время ( алгоритм AKS ).