Метод Лемана
Алгоритм Лемана (або алгоритм Шермана Лемана) детерміновано розкладує дане натуральне число на множники за арифметичних операцій. Алгоритм був вперше запропонований американським математиком Шерманом Леманом в 1974 році[1]. Даний алгоритм був першим рандомізованим алгоритмом факторизації цілих чисел, який має оцінку меншу, ніж . На сьогодні він має чисто історичний інтерес і, як правило, не використовується на практиці.[2]
Метод Лемана
Метод Лемана розвиває ідеї, що закладені в алгоритмі Ферма і знаходить дільники числа , використовуючи рівність для деякого цілого числа . Він базується на наступній теоремі.[2]
Формулювання теореми
Нехай — додатне непарне ціле число, а — ціле число таке, що . Якщо , де і прості, а також
- , то тоді існують такі невід'ємні цілі числа , , , що
- ,
- ,
- , якщо непарне,
і
- .
Якщо — просте, то таких чисел , , не знайдеться.[1]
Модифікованй метод Лемана
Формулювання теореми
Нехай можна записати як добуток двох непарних взаємно простих чисел, що задовольняють нерівностям . Тоді знайдуться такі натуральні числа і , що
2. Виконується нерівність .[2] Для доведення даної теореми нам потрібна наступна лема. Лема
Якщо , тобто , то твердження теореми виконується для . Далі будемо вважати .
Розкладемо в ланцюговй дріб. Позначимо -тий наближений дріб до . Тоді
, , ,
оскільки . Оберемо перший номер такий, що
, .
Такий номер обов'язково знайдеться, бо в останньому наближеному дробі знаменник . Доведемо, що і задовольняють твердженню леми. Очевидно, що . Далі,
за властивостями ланцюгового дробу.
Розглянемо спочатку випадок . В цьому випадку
,
що і потрібно було довести.
Тепер розглянемо випадок . Нерівності приймуть вигляд , і тоді . Відповідно, за властивостями ланцюгових дробів, виконуються нерівності
. І тоді
.
Лема доведена.[3]
Доведення теореми
,
де . В силу леми, ціле число задовольняє нерівності . Отже, виконано перше твердження теореми. Для доведення другого твердження покладемо , так як , то і . Використовуючи оцінку зверху для , отримуємо
.
З цього випливає, що . Теорема доведена. [4]
Алгоритм (модифікований)
Нехай - непарне і .
Крок 1. Для перевірити умову . Якщо на цьому кроці не вдалося розкласти на множники, то переходимо до кроку 2.
Крок 2. Якщо на кроці 1 дільник не знайдено і - складене число, то , де - прості числа, і . Тоді для всіх і всіх перевірити чи є число квадратом натурального числа. Якщо це так, то для і виконується взяття по модулю:
- чи .
В цьому випадку для перевіряється нерівність і якщо ця нерівність виконується, то — розклад на два множники. Якщо ж алгоритм не знайшов розкладу на два множники, то - просте число.[5]
Цей алгоритм спочатку перевіряє чи має прості дільники, які не перевищують , а потім починає перебір значень і для перевірки виконання теореми. У випадку коли шукані значення і не знайдені, ми отримуємо, що число - просте. Таким чином ми можемо розглядати даний алгоритм як тест числа на простоту.[6]
Швидкість
Обчислення залежності від величини числа, що факторизується
На першому кроці треба зробити операцій ділення для пошуку маленьких дільників числа .
Таким чином швидкість всього алгоритму - .[6]
Залежність від розрядності числа, що факторизується
В більшості випадків більш важливу роль грає залежність часу виконання від розрядності числа, що досліджується. Маючи поліноміальну залежність для величини отримуємо експоненціальну залежність часу виконання методу від розрядності числа, що факторизується.[7]
, де - розрядність.
Деякі частинні випадки
Як покращення методу Ферма, метод Лемана також істотно залежить від відстані між множниками числа, час його виконання лінійно залежить від дистанції. Однак, якщо відстань між множниками мала, то метод Лемана значно програє методу Ферма.
Для чисел з невеликим простим дільником ситуація інша - метод Лемана завдяки послідовному діленню на першому кроці достатньо швидко відділить простий множник.[7]
Псевдокод
for
to
do
if
then
return
end if
end for
for
to
do
for
to
do
if
then
if
then
return
else if
then
return
end if
end if
end for
end for
Пояснення:
означає, що націло ділиться на .
Функція повертає , якщо є повним квадратом і в іншому випадку.
Можливості паралельної реалізації методу
Загальна ідея
Паралельна реалізація базується на наступному підході:[7]
Крок 1:
Реалізація з застосуванням технології GPGPU
Для успішної реалізації алгоритму з застосуванням технології GPGPU треба розв'язати дві проблеми:[8]
2. : Виконаємо ітерацій. На кожній ітераціїї виконуємо операцій ділення на ядрах. В кінці кожної ітерації визначаємо завершити процес чи ні. Крок 2: Розподілити між ядрами графічного процесора так же як і в кроці 1. На кожному ядрі виконати 1-3:
2. У випадку отримання позитивного результату на попередньому пункті, обчислити і .
3. Для значень і перевірити умову .
4. Для значень і , що пройшли останню перевірку, перевірити виконання умови . Останній пункт краще виконувати на ЦП, так як ймовірність виконання даних операцій досить мала, а така перевірка на графічному процесорі відбувається достатньо повільно.<ref name=CUDA>
Приклад
Розглянемо приклад з , тоді для , де , перевіряємо чи є число дільником числа . Не важко переконатись, що таких немає. Переходимо до наступного пункту.
Для всіх і всіх перевіряємо чи є число квадратом натурального числа. В нашому випадку існують такі і , що вираз є повним квадратом і дорівнює . Відповідно, и . Тоді , задовольняє нерівності і є дільником числа . В результаті, ми розклали число на два множники: і .
Примітки
- Lehman, R. Sherman. Factoring Large Integers. — Mathematics of Computation, 1974. — Т. 28, № 126. — С. 637-646. — DOI: .
- Нестеренко, 2011, с. 140.
- Василенко, 2003, с. 65—66.
- Нестеренко, 2011, с. 142.
- Василенко, 2003, с. 65.
- Нестеренко, 2011, с. 143.
- Макаренко А.В.,Пыхтеев А. В., Ефимов С. С. ИССЛЕДОВАНИЕ ПАРАЛЛЕЛЬНЫХ АЛГОРИТМОВ ФАКТОРИЗАЦИИ ЦЕЛЫХ ЧИСЕЛ В ВЫЧИСЛИТЕЛЬНЫХ КЛАСТЕРНЫХ СИСТЕМАХ // Омский государственный университет им. Ф.М. Достоевского (Омск). — 2012. — Т. 4, № 66. — С. 149—158.
- Желтов С. А. АДАПТАЦИЯ МЕТОДА ШЕРМАНА–ЛЕМАНА РЕШЕНИЯ ЗАДАЧИ ФАКТОРИЗАЦИИ К ВЫЧИСЛИТЕЛЬНОЙ АРХИТЕКТУРЕ CUDA // Российский государственный гуманитарный университет (Москва). — 2012. — Т. 14, № 94. — С. 84-91.
Література
- Василенко О. Н. Теоретико-числовые алгоритмы в криптографии. — М. : МЦНМО, 2003. — 328 с. — ISBN 5-94057-103-4.
- Алексей Нестеренко. Введение в современную криптографию. — МЦНМО, 2011. — 190 с.
- Richard Crandall, Carl Pomerance. A Computational Perspectives. — 2nd. — Springer, 2011. — 597 с. — ISBN 0-387-25282-7.