Алгоритм Лемана (или алгоритм Шермана Лемана) детерминировано раскладывает данное натуральное число на множители за арифметических операций. Алгоритм был впервые предложен американским математиком Шерманом Леманом в 1974 году.. Данный алгоритм был первым детерминированным алгоритмом факторизации целых чисел чисел, имеющим оценку меньшую, чем . В настоящий момент носит чисто исторический интерес и, как правило, не используется на практике.
Алгоритм
Пусть нечетно и .
Шаг 1. Для проверить условие . Если на этом шаге мы не разложили на множители, то переходим к шагу 2.
Шаг 2. Если на шаге 1 делитель не найден и — составное, то , где — простые числа, и
Тогда для всех и всех проверить, является ли число квадратом натурального числа. Если является, то для и
В этом случае для d^ проверяется неравенство ~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^, удовлетворяет неравенству 1 < d^ и является делителем числа n. В итоге, мы разложили число 1387 на два множителя: 73 и 19.