ЛИТЕРАТУРА / КНИГИ

Метод Лемана


Алгоритм Лемана (или алгоритм Шермана Лемана) детерминировано раскладывает данное натуральное число ~n на множители за ~O(n1/3 арифметических операций. Алгоритм был впервые предложен американским математиком Шерманом Леманом в 1974 году.. Данный алгоритм был первым детерминированным алгоритмом факторизации целых чисел чисел, имеющим оценку меньшую, чем ~O( \sqrtn ). В настоящий момент носит чисто исторический интерес и, как правило, не используется на практике.

Алгоритм

Пусть ~n нечетно и ~n>8.

Шаг 1. Для a=2,\;3,\;\ldots,\;\lfloor n1/3rfloor проверить условие a\mid n. Если на этом шаге мы не разложили ~n на множители, то переходим к шагу 2.

Шаг 2. Если на шаге 1 делитель не найден и ~n — составное, то ~n=pq, где p,\;q — простые числа, и n1/3p\leqslant q.

Тогда для всех k=1,\;2,\;\ldots,\;\lfloor n1/3rfloor и всех d=0,\;1,\;\ldots,\;\left\lfloor\fracn^1/64\sqrtk\right\rfloor+1 проверить, является ли число \left(\left\lfloor\sqr4knright\rfloor+d\right)^2-4kn квадратом натурального числа. Если является, то для A=\left\lfloor\sqr4knright\rfloor+d и B=\sqrA^2-4kn/math> выполнено сравнение:
A^2\equiv B^2\pmodn или (A-B)(A+B)\equiv 0\pmodn.

В этом случае для d^

  • =(A-B,\;n) проверяется неравенство ~1
  • . Если оно выполнено, то n=d^*\cdot(n/d^*) — разложение ~n на два множителя.
Если алгоритм не нашел разложение ~n на два множителя, то ~n — простое число.

Данный алгоритм в начале проверяет имеет ли n простые делители не превосходящие \lfloor n1/3\rfloor , а после устраивает перебор значений k и d для проверки выполнимости указанной ниже Теоремы. В случае, если искомые значения x и y , не найдены, то мы получаем что число n простое. Таким образом мы можем рассматривать данный алгоритм как тест числа n на простоту

Доказательство

Метод Лемана развивает идеи, заложенные в алгоритме Ферма и ищет делители числа n, используя равенство x^2-y^2=4kn для некоторого целого числа b. Он основан на следующей теореме.

Теорема: Пусть n = pq составное число, являющееся произведением двух нечетных взаимно простых чисел, удовлетворяющих неравенствам n1/3< p < q < n2/3. Тогда, найдутся натуральные числа x,\;y и k \geqslant 1 такие, что

1. Выполнено равенство x^2-y^2=4kn при k < n1/3,
2. Выполнено неравенство 0 \leqslant x - \lfloor \sqr4kn\rfloor < \fracn^1/64\sqrtk + 1.

Для доказательства данной теоремы нам потребуется следующая Лемма.

Лемма: Пусть выполнены условия Теоремы. Тогда найдутся натуральные числа r, \;s такие что rs < n1/3/math> и \mid pr - qs \mid < n1/3/math>.

Доказательство Леммы: Если p = q , т.е. n = p^2 , то утверждение теоремы выполнено для r = s = 1. Далее будем считать p.

Разложим \frac qp в непрерывную дробь. Мы обозначаем \frap_jq_j} j-ю подходящую дробь к \fracqp . Тогда

p_0 = [\fracqp], q_0=1, 0,

поскольку \fracqp < \frac n^2/3n^1/3 = n1/3/math>. Выберем первый номер m такой, что

p_m q_m < n1/3/math>, pm+1qm+1> n1/3/math>.

Такой номер обязательно найдется, поскольку у последней подходящей дроби знаменатель q_N = p > n1/3/math>. Докажем, что r = p_m и s = q_m удовлетворяют утверждению леммы. Очевидно, что rs < n1/3/math>. Далее,

|\fracrs - \fracqp| \leqslant |\fracrs - \fracp_m+1q_m+1| = \frac1s q_m+1

по свойствам подходящих дробей.

Рассмотрим сначала случай \fracp_m+1q_m+1 \leqslant \frac qp. В этом случае

|pr - qs| = ps|\fracrs - \fracqp| \leqslant \fracpssq_m+1} = \frac pq_m+1 = \sqrt{\fracpq_m+1

\frac pq_m+1} \leqslant \sqrt\fracpq_m+1 \sqrt\fracqp_m+1 = \sqrt\fracnpm+1_m+1 < \fracn^1/2n^1/6 = n1/3/math>,

что и требовалось доказать.

Теперь рассмотрим случай \fracp_m+1q_m+1 > \fracqp . Тогда перевернем неравенства

\fracp_m+1q_m+1 > \fracqp > \frap_mq_m}, откуда

\fracq_mp_m > \fracpq > \fracq_m+1p_m+1. Следовательно, по свойствам непрерывных дробей, выполнены неравенства

\frac{1rq\leqslant |\fracsr - \fracpq| \leqslant |\fracsr - \fracq_m+1p_m+1| = \frac1r p_m+1. Отсюда

1 \leqslant |sq - pr| = rq|\fracsr - \fracpq| \leqslant \fracrqrp_m+1} = \frac qp_m+1 = \sqrt{\fracqp_m+1

\frac qp_m+1} \leqslant \sqrt\fracqp_m+1 \sqrt\fracpq_m+1 = \sqrt\fracnpm+1_m+1 < \fracn^1/2n^1/6 = n1/3/math>

Лемма доказана.

Доказательство Теоремы: Пусть p и q нечетные делители числа n. Пусть x = pr + qs и y = pr - qs, где r и s удовлетворяют утверждению Леммы, тогда выполнено равенство
x^2 - y^2 = (pr +qs)^2 - (pr - qs)^2 = 4rspq = 4kn,
где k = rs. В силу Леммы, целое число k удовлетворяет неравенству k < n1/3/math>. Следовательно выполнено первое утверждение Теоремы.

Для доказательства второго утверждения положим z = x - \lfloor \sqr4bn\rfloor = pr + qs - \lfloor \sqr4bn\rfloor, Так как x^2 = 4kn + y^2, то x \geqslant\sqr4kn/math> и z \geqslant 0. Используя оценку сверху для y, получаем
n2/3> y^2 = x^2 - 4kn = (pr + qs + \sqr4kn(pr + qs - \sqr4kn \geqslant 2\sqr4knpr + qs - \sqr4kn \geqslant 2\sqr4knz - 1).
Откуда следует, что z < \fracn^2/32\sqrt4kn + 1 = \fracn^1/64\sqrtk + 1. Теорема доказана.

Трудоемкость

На первом шаге нам требуется произвести \lceil n1/3\rceil операций деления для поиска маленьких делителей числа n.

Трудоемкость второго шага оценивается в операциях тестирования числа \left(\left\lfloor\sqr4knright\rfloor+d\right)^2-4kn, на то, является ли оно полным квадратом. В начале заметим, что для всех k > \fracn^1/64 выполняется только две проверки: D = 0 и D = 1. Тогда, трудоемкость второго этапа оценивается сверху величиной

\frac n^1/64 \sum\lfloor n1/6\rfloor=1\frac 1 \sqrtk + 2(\lceil n1/3\rceil - \lfloor n1/6\rfloor) < 3 \lceil n1/3\rceil .
Таким образом трудоемкость всего есть величина ~O(n1/3.

Пример

Разберем пример с n = 1387, тогда для a = 1,\;2,\;3,\;\ldots,\;\lfloor n1/3\rfloor, где \lfloor n1/3\rfloor = 11,

проверяем является ли число a делителем числа n. Не трудно убедится, что таких нет, тогда переходим к следующему пункту.

Для всех k = 1,\;2,\;3,\;\ldots,\;11 и всех d = 0,\;1,\;\ldots,\;4 проверяем, является ли число \left(\left\lfloor\sqr4knright\rfloor+d\right)^2-4kn квадратом натурального числа. В нашем случае существуют такие k = 3 и d = 1, что выражение \left(\left\lfloor\sqr4knright\rfloor+d\right)^2-4kn является полным квадратом и равно 256 = 16^2. Следовательно A = 130 и B = 16.

Тогда d^
  • = (A - B; n) = 19, удовлетворяет неравенству 1 < d^
    • < n и является делителем числа n. В итоге, мы разложили число 1387 на два множителя: 73 и 19.

 


Комментарии

Добавить комментарий
Комментарий
Отправить