1

Тема: Теория чисел. Факторизация. Проверка на простоту

Я решил немного изучить быстрые алгоритмы факторизации и проверки на простоту. Начнем с проверки на простоту:
В Кормене вычитал про тест Миллера-Рабина, увидел, что реализация довольно простая, написал, даже работает..:) У меня в силу скудных познаний математики возникли вопросы, на которые не Кормен, ни гугл ответов (понятных для меня) не дали. Отличие теста Миллера-Рабина от простой проверки малой теоремы Ферма заключается в том, что по ходу возведения в степень мы ещё и проверяем некий нетривиальны корень из 1. Собственно вопрос: что такое этот корень из 1 и как он влияет на алгоритм, простоту числа и т.д?
С факторизацией дела немного хуже обстоят. В том же Кормене  прочитал про метод Полларда, который ро. Мало того, что метод для меня совсем не очевиден, так ещё работает он достаточно сомнительно. В моем алгоритме я сначала проверял число на простоту, потом проверял все простые числа меньшие чем 10^7, которые в самом начале решетом нашел, а потом, зная, что N=pq, писал Полларда-ро. Реализация из Кормена и та, котору я списал с е-макса, на злостных тестах вроде (2^31-1)*(10^9+7) не работает. Гуглил другие методы, из всех понятным мне кажется лишь метод Ферма, который, кстати, прилично работает, но на вышеупомянутых тестах и он валится. Метод Лемана в реализации простой, но там мне кажется огромная константа в силу постоянных вычислений корней разных степеней+переполнение на тестах где N^4/3>2^63-1, то есть работает где-то для N<=10^13 степени, что как-бы не серьезно. Хотя я могу ошибаться, ибо опираюсь лишь на статью из Википедии.
Знаю, есть ещё куча разных методов, вроде р+1, р-1 и так далее, но они тёмные какие-то для меня.
Какими методами пользуетесь вы, в чём их суть? Если не сложно, то объясните в двух словах детали реализации и почему они правильные? Возможно я просто плохо понимаю тот же Полларда-ро, а на самом деле он хорошо работает, но моя кривая реализация подвела.
Заранее спасибо!

2

Re: Теория чисел. Факторизация. Проверка на простоту

несколько месяцев назад этим занимался, тоже выискивал методы, комбинировал их. по теме скажу, что  у меня в реализации применяется следующая комбинация:
- проверить на простые до 10^6 (10^7)
далее рекурсия:
- проверка на простое Миллером-Рабином
- Монте-Карло
- если не нашли делитель, то Ро
- если не нашли делитель, то Ферма

Я заметил, что Монте-Карло очень сильно вывозит ситуацию на некоторых тестах, и, в частности, на этом.
Реализовывал по основе этого: http://algolist.manual.ru/maths/teornum … /monte.php (второй метод)

3

Re: Теория чисел. Факторизация. Проверка на простоту

Спасибо, разберусь с Монте-Карло и отпишусь)
Если не сложно, то можно поподробней про Ро? А то чувствую я, что как-то неправильно понимаю его.

4

Re: Теория чисел. Факторизация. Проверка на простоту

Забудь про методы типа Поларда и обрати внимание на модификации метода Ферма, например Диксона или Померанца.