3. Проверка чисел на простоту
• Самый простой способ проверки числа nна
простоту —перебор делителей (trialdivision)
• •Тест на основе малой теоремы Ферма
4. Тест на основе малой
теоремы Ферма и алгоритма
Евклида
• Из малой теорема Ферма следует, что
если сравнение
an-1≡1(modn)
• не выполнено хотя бы для одного числа
a в интервале {1, 2, …, n−1}, то n—
составное
5. Тест Ферма
1. выбираем случайное число a из {1, 2, …, n−1}
и проверяем с помощью алгоритма Евклида
условие (a,n)=1;
2. если оно не выполняется, то ответ «n—
составное»;
3.проверяем выполнимость сравнения
an-1≡1(modn) ;
4.если сравнение не выполнено, то ответ «n—
составное»;
5.если сравнение выполнено, то ответ
неизвестен, но можно повторить тест еще раз
6. Числа Кармайкла
Особо плохими для теста Ферма являются
так называемые числа Кармайкла
Они обладают следующим свойством: для
любого a такого, что (a,n)=1верно
an-1≡1(modn) ;
Первые три числа Кармайкла: 561, 1105, 1729
Среди первых 100000000 чисел их всего 255
В 1994г. было доказано, что таких чисел
бесконечно много
8. Тест Миллера-Рабина
Пусть n—нечетное и n−1= 2st, t—нечетное.
Если число nявляется простым, то при всех
a>1 выполняется сравнение
an−1≡1(modn)
Поэтому, рассматривая элементы {at, a2t,
…, a2s−1t} можно заметить, что либо
среди них найдется равный −1 (modn),
либо at≡1(modn)
На этом замечании основан следующий
вероятностный тест простоты МиллераРабина
9. Тест Миллера-Рабина
1.Выбираем случайное число a из интервала {1, 2, …, n−1}
и проверяем с помощью алгоритма Евклида условие
(a,n)=1;
2.Если оно не выполняется, то ответ «n—составное»;
3.Вычисляем at(modn);
4.Если at≡±1(modn), то переходим к п.1;
5.Вычисляем a2t, …, a2s−1t до тех пор, пока не появится −1;
6.Если ни одно из этих чисел не равно −1, то ответ «n—
составное»;
7.Если мы достигли −1, то ответ неизвестен (и тест можно
повторить еще раз).
Составное число не будет определено как составное с
вероятностью 1⁄4
10. Тест AKS
• Ввод: целое число n > 1.
• Если n = ab для целых чисел a > 0 и b > 1,
вернуть составное.
• Найдем наименьшее r такое что
or(n) > log2(n).
• Если 1 < НОД(a,n) < n для некоторого a
≤ r, вернуть составное.
• Если n ≤ r, вернуть простое.
• Для всех a от 1 до
• если (X+a)n≠ Xn+a (mod Xr − 1,n), вернуть
составное.