Ймовірнісний тест Мілера-Рабіна
Тестом Мілера-Рабіна називається ймовірнісний тест перевірки на простоту, який було запропоновано Мілером з використанням ідей Рабіна.
Тест Мілера-Рабіна найбільш часто використовується на практиці і називається сильним тестом на простоту. Він базується на такому факті:
Нехай п – непарне просте число, причому п – 1= 2s r, де r − непарне. Нехай а − таке натуральне число, що НСД(а,n) = 1. Тоді має місце одна із рівностей: аr ≡ 1(mod п) або для деякого j, 0 ≤ j ≤s – 1.
Означення. Нехай п – непарне складене число, п-1 = 2s r, де r − непарне, а − натуральне число, 1 ≤ а≤ п- 1.
Якщо аr ≠ 1(mod n) та ф для всіх j, 0 ≤ j ≤s – 1, то а називається сильним свідком (свідком складеності) для п.
Якщо аr ≡ 1(mod п) або для деякого j, 0 ≤ j ≤s – 1, то а називається сильним брехунцем для п, а само число п - сильним псевдопростим за основою а. Кількість сильних брехунців числа п будемо позначати через sl(n) (strong liars).
АЛГОРИТМ
Вхід: непарне ціле число п ≥ 3, параметр t ≥ 1.
Вихід: визначення, чи є число п простим.
Записати п - 1 = 2s r, де r − непарне.
for i =1 tо t do
Обрати довільне ціле а, 2 ≤ а ≤ п - 2.
Обчислити y ← аr (mod п).
if y ≠ 1 and y ≠ n – 1 then
j←1
while j ≤ s-1 and y ≠ n-1 do
y←y2mod n
if y =1 then return(«складене»).
j←j+1
if y ≠ n-1 then return(«складене»).
return(«просте»).
Приклад 4.
п = 221 = 13 17 − складене число. п - 1 = 220 = 22 55, s = 2, r = 55.
Нехай а = 5, НСД(5, 221)= 1. ar(mod n) ≡ 555(mod 221) ≡112 ≠ -1.
Вираз будемо обчислювати для j = 0, 1 (0 ≤ j ≤ 1) поки не отримаємо -1.
j= 0: ar(mod п) ≡ 555(mod 221) ≡ 112 ≠ -1.
j= 0: a2r(mod п) ≡ (555)2(mod 221) ≡ 168 ≠ -1, що підтверджує складеність 221.
Нехай а = 21, НСД(21,221) = 1. аr(mod n) ≡ 2155(mod 221) ≡ 200 ≠ 1.
j = 0: ar(mod п) ≡ 2155(mod 221) ≡ 200≠ -1.
j = 1: а2r(mod n) ≡ (2155)2(mod 221) ≡ -1, отже, 221 може бути простим.
Приклад показує, що число 5 є сильним свідком для 221, а 21 є сильним брехунцем для 221.
Якщо перебрати в якості а всі значення від 1 до 220, то можна побачити, що число 221 має 6 таких сильних брехунців: 1, 21,47, 174, 200, 220, а sl(221) = 6.
Yandex.RTB R-A-252273-3