Тест простоти Ферма

Матеріал з testwiki
Перейти до навігації Перейти до пошуку

Тест простоти Ферма — це імовірнісна перевірка для визначення чи є число ймовірним простим.

Концепція

Мала теорема Ферма стверджує, що якщо p просте число і 1a<p, тоді

ap11(modp).

Якщо ми хочемо перевірити p на простоту, тоді ми можемо обрати випадкове a в інтервалі і подивитись чи виконується рівність. Якщо рівність не зберігається, значить число складене. Якщо рівність виконується для багатьох a, тоді ми кажемо, що p — можливо просте.

Може так статись, що за всіх наших перевірках рівність зберігалась. Будь-яке a таке, що

an11(modn)

тобто n складене, називають брехунами. Якщо перевірка пройдена успішно, n називають псевдопростим Ферма по базі a.

Якщо ми обрали a таке, що

an1≢1(modn)

тоді a називається свідком складеності n.

Приклад

Припустимо ми хочемо визначити чи є n=221 простим. Випадково оберемо 1a221, наприклад a=38. Перевіримо попереднє рівняння:

an1=382201(mod221).

Або 221 є простим або 38 є брехун, отже ми беремо інше a, наприклад 26:

an1=26220169≢1(mod221).

Отже 221 є складеним і 38 дійсно брехун.

Алгоритм і часова складність

Алгоритм можна записати так:

Вхід: n: значення для тестування на простоту; k: параметр, що визначає кількість перевірок
Вихід: складене якщо n є складеним, інакше ймовірно просте
повторити k разів:
   випадково обрати a в діапазоні [1,n1]
   якщо an1≢1(modn), тоді повернути складене
повернути ймовірно просте

Із використанням швидких алгоритмів для піднесення до степеня за модулем, час виконання становить O(k×logn×loglogn×logloglogn), де k є числом перевірок, а n — число, яке ми тестуємо на простоту.

Вада

Існує безкінечно багато значень n (відомі як числа Кармайкла) для яких всі значення a для яких gcd(a,n)=1 — брехуни. Хоча чисел Кармайкла істотно менше ніж простих,,[1] їх достатньо, щоб часто замість тесту Ферма використовували інші тести простоти такі як тест простоти Міллера-Рабіна та тест простоти Соловея-Штрассена.

Загалом, якщо n не є числом Кармайкла, тоді щонайменше половина всіх

a(/n)*

є свідками. Для доведення цього покладемо a свідком, а a1,a2,,as брехунами. Тоді

(aai)n1an1ain1an1≢1(modn)

і, отже всі a×ai для i=1,2,...,s є свідками.

Тобто, якщо ми запустили k незалежних перевірок на складеному числі n, імовірність, що всі k раз нам трапляться брехуни (тобто, імовірність помилки) становить не більше ніж (12)k.

Застосування

Програма шифрування Pretty Good Privacy (PGP) використовує цей тест у своїх алгоритмах. Шанс утворення числа Кармайкла менш ніж 1/1050, що достатньо для практичних цілей.

Примітки

Шаблон:Reflist

Шаблон:Алгоритми теорії чисел

  1. Erdös' upper bound for the number of Carmichael numbers is lower than the prime number function n/log(n)