Московский государственный университет имени М.В.Ломоносова
Опубликован: 15.03.2007 | Доступ: свободный | Студентов: 611 / 26 | Оценка: 5.00 / 4.50 | Длительность: 19:30:00
Специальности: Программист
Лекция 3:

Вероятностные алгоритмы и класс BPP. Проверка простоты числа

< Лекция 2 || Лекция 3: 12 || Лекция 4 >

Алгоритм проверки простоты.

Вход: число n.

Шаг 1. Проверяем четность n. Если n=2, то ответ " n — простое", если n — четное и больше 2, то ответ " n — составное", в противном случае переходим к шагу 2.

Шаг 2. Проверяем, извлекается ли из n нацело корень k -й степени при k=2,\dots,\lfloor\log_2n\rfloor. Если извлекается, то ответ " n — составное", иначе переходим к шагу 3.

Шаг 3. Записываем n-1 в виде 2^k\cdot l, где k>0, а l — нечетное.

Шаг 4. Выбираем случайное a среди чисел от 1 до n.

Шаг 5. Вычисляем a^l,\ a^{2l},\ \dots,\ a^{n-1} по модулю n.

Проверка 1. Если a^{n-1}\not\equiv1\pmod n, то ответ " n — составное".

Проверка 2. Если найдено такое j, для которого a^{2^jl}\not\equiv\pm1\pmod n, а a^{2^{j+1}l}\equiv1\pmod n, то ответ " n — составное".

В противном случае ответ " n — простое".

Анализ алгоритма.

Теорема 3.2. Если n — простое, то описанный выше алгоритм всегда (с вероятностью 1) выдает ответ " n — простое".

Если n — составное, то ответ " n — составное" будет получен с вероятностью \geq1/2.

Замечание 3.2. Чтобы получить полиномиальный вероятностный алгоритм проверки простоты числа в смысле определения 3.1, нужно дважды применить приведенный алгоритм. Тогда вероятность ошибки станет меньше 1/4.

Доказательство (теоремы 3.2). Из сказанного выше следует, что в доказательстве нуждается только второе утверждение.

Пусть n=uv\equiv1\pmod2, где (u,v)=1 (если такого представления нет, то на шаге 2 будет обнаружена непростота). Если (a,n)>1, то проверка 1 для такого a заведомо обнаружит, что n — составное. Так что достаточно доказать, что не меньше половины тех a, которые взаимно просты с n, обнаруживают непростоту числа.

Обозначим группу (\ZZ/u\ZZ)^* через U, группу (\ZZ/v\ZZ)^* — через V. Из китайской теоремы об остатках следует, что группа (\ZZ/n\ZZ)^* изоморфна U\times V (изоморфизм задается естественным образом — вычислением остатков по модулю u и по модулю v ).

Рассмотрим множества U^k=\{x^k: x\in U\}, V^k=\{x^k: x\in V\}. Это подгруппы в U и V соответственно (произведение k -х степеней есть k -я степень, обратный к k -й степени есть k -я степень). Так что |U|/|U^k| — целое число. Более того, отображение x\mapsto x^k является гомоморфизмом групп, поэтому число прообразов при этом отображении одинаково для всех элементов U^k.

Очевидно, что U^{2l}\subseteq U^l (степеней квадратов не больше, чем всех степеней). Поэтому получаем пару невозрастающих цепочек множеств

U^l\supseteq U^{2l}\supseteq \ldots \supseteq U^{n-1}\supseteq\{1\},\qquad V^l\supseteq V^{2l}\supseteq \ldots \supseteq V^{n-1}\supseteq\{1\}.
Дальнейшее рассуждение разбивается на анализ нескольких случаев.

  1. Пусть U^{n-1}\ne\{1\} или V^{n-1}\ne\{1\}.

    Чтобы пройти проверку 1 в алгоритме, нужно после возведения в (n-1) -ю степень получить пару остатков (1,1). Поскольку прообразов каждого числа из U^{n-1}\ne\{1\} одинаковое количество, вероятность получения пары (1,1) не выше 1/2.

  2. Пусть U^{n-1}=V^{n-1}=\{1\}.

    Поскольку l — нечетное, -1\in U^{l}\cap V^l, т.е. найдется такое t=2^s, 0\le s<k, что U^{2t}\double=V^{2t}=\{1\}, а U^t\ne\{1\} или V^t\ne\{1\}.

    Будем доказывать, что с вероятностью не меньше 1/2 в этом месте проверка 2 алгоритма обнаружит, что n — составное. В данном случае a^{2t}\equiv1 \pmod n, так что нужно понять, с какой вероятностью a^t не равно \pm1. Рассмотрим два случая.

    1. Одно из множеств U^t, V^t равно \{1\}. Пусть, например, U^t\double=\{1\}. В этом случае можно утверждать, что a^t\not\equiv-1\pmod n (остатку -1 при делении на n соответствует пара остатков (-1,-1) при делении на u,v ).

      Можно рассуждать так же, как и в случае 1. С вероятностью не меньше 1/2 получим пару остатков (1, \alpha), \alpha\ne1.

    2. Оба множества U^t, V^t содержат по крайней мере два элемента, пусть |U^t|=c, |V^t|=d. В этом случае может получиться как a^t\equiv 1\pmod n, так и a^t\double\equiv -1\pmod n, но вероятность этого не превосходит 2/(cd)\leq1/2.

Замечание 3.3. Шаг 2 в алгоритме избыточен, дополнительными соображениями устанавливается, что и для чисел вида m^k проверки 1, 2 дают правильный ответ со значительной вероятностью.

BPP и схемная сложность.

Теорема 3.3. \BPP\subseteq\nuP.

Доказательство. Идея доказательства состоит в том, чтобы усилить оценки вероятностей с (1/3,2/3) до (\varepsilon,1-\varepsilon). Число \varepsilon должно быть настолько мало, чтобы можно было выбрать такое случайное слово y_0, при котором рассматриваемый предикат из BPP совпадает с R(x,y_0).

Суть здесь в том, что повторение опытов за полиномиальное время экспоненциально уменьшает оценку вероятности ошибки \varepsilon, но не меняет размер входа |x|. Поэтому можно добиться выполнения неравенства \varepsilon2^{|x|}<1. При таком соотношении между \eps и |x| всегда найдется случайное слово, для которого нет ошибок ни при каких x.

Действительно, вспомним наглядное толкование BPP, данное после теоремы 3.1. Если доля слов r, на которых происходит ошибка, для каждого x не превосходит \varepsilon, то доля тех слов r, на которых происходит ошибка хотя бы для одного x, не превосходит \varepsilon2^{|x|}<1. Значит, найдутся и такие r, на которых нет ошибок ни при каком x.

Это типичное неконструктивное доказательство существования. Мы доказываем, что вероятность того, что объекта с нужными свойствами не существует, меньше 1. Но это и означает, что хотя бы один такой объект существует.

< Лекция 2 || Лекция 3: 12 || Лекция 4 >