Метод факторизації Діксона
Метод факторизації Діксона (або алгоритм Діксона) — імовірнісний алгоритм факторизації цілих чисел субекспоненційної складності. Алгоритм розробив Джон Діксон, математик Карлтонського університету (1979).
Ідея
Метод заснований на ідеї Моріса Крайчика (Maurice Kraitchik), що узагальнює метод факторизації Ферма:
- У методі Ферма шукають числа, які задовольняють порівнянню , але досить часто виникають пари , в яких не є квадратом. Формально ці пари можна розглядати як порівняння .
- Крайчик відзначив, що такі пари можна множити між собою і в результаті отримати пару, яка задовольнятиме порівнянню Шаблон:Sfn.
- Якщо в такій парі , то найбільший спільний дільник чисел та буде нетривіальним дільником .
Метод
Підготовчий крок
Метод передбачає, що вхідне число є складеним. Цю умову можна досить швидко перевірити за допомогою ймовірнісних тестів простоти. Крім того, передбачається, що не являє собою степінь простого числа[Прим. 1].
Також слід перевірити, що не ділиться на невеликі прості числаШаблон:Sfn.
Перший крок методу Діксона полягає в пошуку таких пар чисел , у яких розкладається в добуток невеликих простих[Прим. 2] (такі числа називають гладкими).
Межу гладкості (найбільше просте в розкладі) визначають величиною Шаблон:Sfn, де:
- — параметр методу, що визначається з міркувань оптимізації . У базовому варіанті цей параметр дорівнює 1/2.
Множину простих чисел, які лежать у проміжку , називають факторною базою. Кількість простих у факторній базі () — її розмір.
У базовому варіанті, який запропонував Діксон, визначення гладкості числа здійснюється шляхом послідовного ділення на прості з факторної бази. Для кожного розкладеного зберігають вектор показників степенів у його розкладі Шаблон:Sfn.
Після того, як знайдено щонайменше k+1 гладких чисел (на одне більше, ніж розмір факторної бази), переходять до другого кроку.
На другому кроці зі знайдених розкладів потрібно скласти добуток, який буде повним квадратом.
Для повного квадрата всі показники степенів мають бути парними, отже, по модулю два вони будуть нульовими. Тож замість показників степенів розглядають їх залишки по модулю два. Оскільки вектори розміру k над полем F2 утворюють векторний простір, то множина з к+1 векторів буде лінійно залежною, і в ній існує нетривіальна комбінація, яка дорівнює нульовому вектору. Коефіцієнти такої лінійної комбінації шукають як розв'язання системи лінійних рівнянь, наприклад, методом Гаусса. Усі знайдені коефіцієнти дорівнюватимуть одиниці або нулю, тобто, відповідний вектор або входить у склад добутку, або ніШаблон:Sfn.
На третьому кроці зі знайдених пар будують добутки X та Y, такі, що .
Для чисел X та Y перевіряють умову: 1 < gcd(X ± Y, N) < N Шаблон:Sfn:
- Якщо умова виконана, то числа та являють собою нетривіальні дільники числа N.
- Якщо ж умова не виконується, слід продовжити пошук нових гладких чисел (повернутися на перший крок).
Імовірність успіху чи невдачі на цьому кроці оцінюється величиною 1/2[Прим. 1]Шаблон:Sfn, тому на практиці на першому кроці зазвичай шукають дещо більшу кількість гладких чисел — k+2, k+3, k+4…Шаблон:Sfn
Базовий алгоритм
Псевдокод
Вхід: натуральне число Вихід: нетривіальний дільник // Ініціалізація Обрати межу просіювання . Укласти факторну базу з простих чисел до обраної межі: , . repeat for to do Серед чисел знайти таке, квадрат якого по модулю повністю розкладається на множники факторної бази (такі числа називають B-гладкими): Запам'ятати та відповідний вектор степенів у розкладі: end for У множині векторів знайти таку підмножину , що добуток являє собою повний квадрат (усі степені в добутку — парні): Обчислити: while return
Приклад
Складність
Сам Діксон оцінив асимптотичну складність методу величиною Шаблон:Sfn.
У подальших дослідженнях його оцінку дещо поліпшили, зокрема, за рахунок того, що матриця, яка виникає на другому кроці, є розрідженою й для розв'язку СЛАУ можна застосувати методи, швидші за стандартний метод Гаусса[1]:
- у нотації Ландау
- або в L-нотації
- Шаблон:Sfn
Застосування
Метод Діксона являє собою доволі зручну модель для отримання теоретичних оцінок складності без застосування недоведених гіпотез чи евристик. Втім, на практиці він майже не застосовуєтьсяШаблон:Sfn. Хоча метод потужніший за більшість раніше відомих, однак послідовне ділення на елементи факторної бази (для пошуку гладких чисел) триває довго, а оскільки ця частина є найбільш витратною, то алгоритм виявляється надто повільнимШаблон:Sfn.
Фактично, за схемою Діксона побудовано метод ланцюгових дробів (опублікований 1975 року), а також набагато потужніше квадратичне решето (1982). Однак, в обох згаданих методах замість випадкового вибору та послідовного ділення на елементи факторної бази застосовують інші шляхи побудови пар та пошуку в них гладких чисел Шаблон:Sfn.
Варіанти оптимізації
Примітки
Джерела
Посилання
Помилка цитування: Теги <ref> існують для групи під назвою «Прим.», але не знайдено відповідного тегу <references group="Прим."/>