Обновить
6
0
Hlib Pylypets@Pilipets

Software Engineer

Отправить сообщение

Спасибо за ответ - действительно дополняет статью.

Почему они будут не совсем случайными? Как вы это оценили?

Я посмотрел, на существующие криптолибы - по поводу практических оценок эффективности, то сделать это проблематично из-за разных API по генерации простых чисел. Какой-то алгоритм будет генерировать n-e простое, другой - простое c n битами, этот - простое больше n, где-то идут ограничения на кратность 128, 512 бит в размере, где-то и вовсе псевдопростые и т.д.

Поэтому больший смысл имеют асимптотические оценки, но для того, чтобы их сделать, то нужно углубляться в те статьи о корректности алгоритма, которые я упомянул ))
Ссылки с оценками асимптотики у меня нету, но я читал когда-то об этом алгоритме, но уже не помню, где.

Могу добавить статистику времени работы этого алгоритма для генерации простых чисел разного порядка, если это поможет.

Если говорить про вероятность того, что для простого nмы найдём нужное a, то это 1 - O(s^{-1}). n и sфиксированные, количество a, которые нас не удовлетворяют, не больше r, всего различных aэто n.

p=1-O(r/n)=1-O(r/(s*r + 1)) =1-O(s^{-1})

Добавил оценку вероятности в статью.

Я понял, о чём вы говорите. В принципе, я могу дополнить статью сравнением эффективности по времени работы других алгоритмов по генерации простых/псевдопростых чисел с этим - спасибо за предложение по улучшению.

Но изначальной целью было продемонстрировать сам алгоритм как подход к генерации больших однозначно простых чисел, так как не видел, чтобы он где-то был описан.

Спасибо, исправил - заменил x на a.

Тест Миллера-Рабина вероятностный, который даёт сильное псевдопростое число, а здесь генерируется однозначно простое число.

В данном случае xможно считать a- когда мы рассматриваем конгруэнцию, то n, r фиксированные параметры, а x это переменная вместо a. Примитивное решениеx==1нас не интересует, так как мы выбирали a>1, поэтому я так и записал.

А о каких других алгоритмах вы говорите? Пример можно?

Я так написал, чтобы подчеркнуть комментарий и следование словесному алгоритму - там действий никаких не нужно в else блоке. Можно заменить на # else: pass n isn't prime, choose another n

После выполнения инструкции break мы выйдем с цикла по выбору a и перейдём к циклу по выбору n, поэтому произойдёт ровно то, что описано комментарием.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Бэкенд разработчик
Средний
C++
Python
Алгоритмы и структуры данных
Разработка программного обеспечения
Объектно-ориентированное проектирование
Многопоточность