Слишком поздно на вечеринку, но надеюсь, это поможет. Это актуально, если вы ищете большие простые числа:
Для проверки больших нечетных чисел необходимо использовать тест Ферма и / или Миллера-Рабина.
В этих тестах используется модульное возведение в степень, которое довольно дорого, для возведения в степень n
битов требуется по крайней мере n
умножение больших int и n
деление больших int. Это означает, что сложность модульного возведения в степень составляет O (n³).
Так что, прежде чем использовать большие пушки, вам нужно сделать несколько пробных делений. Но не делайте это наивно, есть способ сделать это быстро.
Сначала умножьте как можно больше простых чисел на количество слов, которые вы используете для больших целых чисел. Если вы используете 32-битные слова, умножьте 3 * 5 * 7 * 11 * 13 * 17 * 19 * 23 * 29 = 3234846615 и вычислите наибольший общий делитель с числом, которое вы тестируете, используя евклидов алгоритм. После первого шага число уменьшается ниже размера слова и продолжается алгоритм, не выполняя полных целочисленных делений. Если GCD! = 1, это означает, что одно из простых чисел, которые вы умножили вместе, делит число, поэтому у вас есть доказательство того, что оно не простое. Затем продолжите с 31 * 37 * 41 * 43 * 47 = 95041567 и т. Д.
После того, как вы проверили несколько сотен (или тысяч) простых чисел таким образом, вы можете выполнить 40 раундов теста Миллера-Рабина, чтобы подтвердить, что число простое, после 40 раундов вы можете быть уверены, что число простое, есть только 2 ^ - Вероятность того, что это не так (скорее всего, ваша аппаратная неисправность ...).