Топ питань
Часова шкала
Чат
Перспективи
Квадратичне решето
З Вікіпедії, вільної енциклопедії
Remove ads
Квадратичне решето (англ. quadratic sieve, QS) — алгоритм факторизації цілих чисел, на практиці найшвидший для чисел до 10100. Асипмтотично є другим за швидкістю після загального решета цифрового поля, і значно простіший за нього. Це метод факторизації загального призначення, тобто, час його виконання залежить лише від розміру цілого числа на вході, і не залежить від його вигляду (на відміну від спеціального решета числового поля[en]). Метод винайшов математик Карл Померанц[en] 1981 року як поліпшення лінійного решета Шроппеля.[1]
Remove ads
Вступ
Узагальнити
Перспектива
Візьмемо, наприклад, число Це число складене і не ділиться на жодне з малих простих чисел. Але можна побачити, що це тобто Отже ми можемо розкласти як різницю квадратів. Це є або Кожне непарне складене число можна розкласти як різницю квадратів:
Спробуймо знов з числом 1649. Воно також складене і не має малих простих дільників, менших ніж його логарифм. З 2419 ми взяли перший квадрат більший від нього, а саме і тоді зауважили, що що є квадратом. Можна подумати, що в пошуці квадратів можна пройти послідовність з Для маємо:
-
(1)
і не бачимо квадратів поміж перших результатів.
Попри цю невдачу, попередні три рівняння вже можна використати для розкладення Хоча ані 32, ані 200 не є квадратами, однак їхній добуток — квадрат, а саме отже з того, що
маємо що рівнозначно
-
(2)
Ми знайшли розв'язок для Наскільки це цікаво? Звісно існує багато нецікавих пар А саме, якщо взяти будь-яке значення і покласти Але цей перелік не вичерпує всі розв'язки для цього рівняння, бо розкладення як різницю квадратів дало б пару з Далі, будь-яка пара з
-
(3)
має вести до нетривіального розкладу через Справді, з 3 випливає, що ділить але не ділить жоден з множників, отже мають бути нетривіальними дільниками НСД можна знайти через алгоритм Евкліда. Зрештою, якщо має щонайменше два простих множники, тоді не менше половини розв'язків з взаємно простим з також задовольняють що і є 3.
Remove ads
Ідея
В основі методу лежить така ідея. Припустимо і є цілими такими, що але . Тоді ділить але не ділить ані ані Звідси має бути нетривіальним дільником
Припустимо, що маємо розкласти ціле . Нехай . Розглянемо многочлен . Зауважимо, що
є малим порівняно з , якщо абсолютне значення мале. Алгоритм квадратичного решета обирає і шукає серед чисел -гладкі. Зауважимо, що звідси є квадратичним залишком за модулем Отже фактор-база має складатися з простих чисел , для яких символ Лежандра Окрім цього, тому що може бути від'ємним, також включаємо до фактор-бази.
Перевірка гладкості просіюванням
Замість перевірки на гладкість перебором дільників застосовується ефективніша техніка відома як просіювання (англ. sieving). Спочатку звернемо увагу на те, що якщо є непарним простим у фактор-базі і ділить тоді також ділить для кожного цілого
Отже шляхом розв'язання рівняння для (для цього існують дієві алгоритми, наприклад алгоритм Тоннелі—Шенкса[en]), отримуємо одну або дві (залежно від кількості квадратичних лишків) послідовності значень , для яких ділить .
Для просіювання застосовується властивість логарифма:
Перебіг просіювання такий. Створюється масив , де і кожний елемент ініціалізується значенням . Нехай будуть розв'язками для де є непарним простим числом з фактор-бази. Тоді значення віднімають від тих елементів , для яких або і . Дія повторюється для кожного простого у фактор-базі. (Випадки з і степенями простих чисел можна обробити подібним чином.) Після просіювання елементи масиву зі значеннями, близькими до , швидше за все відповідають -гладким числам (треба брати до уваги похибки округлення), і це можна перевірити перебором дільників.
Remove ads
Алгоритм
Вхід: ціле складене число , яке не є степенем простого.
Вихід: нетривіальний дільник для .
- Обираємо базу дільників де і є -е просте для якого є квадратичним залишком за модулем .
- Обчислити .
- Побудувати многочлен й обчислити значення для x . Просіяти побудований масив елементами факторної бази pi (та їх невеликими степенями).
- Серед близьких до нуля залишків у просіяному масиві знайти гладких чисел :
- Встановити . Поки робити наступне:
- Обчислити і перевірити послідовним діленням на елементи з чи є -гладким. Якщо ні, обираємо новий і повторюємо.
- Якщо є -гладким, скажімо тоді покласти , де для
- Серед векторів vi над полем Z2 знайти нетривіальну лінійну комбінацію, яка дорівнює нульовому вектору, тобто, непорожню підмножину таку, що . Коефіцієнти такої лінійної комбінації можна знайти шляхом розв'язання системи лінійних рівнянь.
- Обчислити
- Для кожного обчислити .
- Обчислити
- Якщо тоді знайти іншу непорожню підмножину таких, що і перейти до етапу 5. (У малоймовірному випадку, якщо підмножина не існує, замінити декілька з двійок новими парами (етап 3), і перейти на етап 4.
- Обчислити і повернути .
Remove ads
Приклад роботи
Алгоритм квадратичного решета для находження нетривіального дільника для
- Обираємо фактор-базу розміру і опущені з бо для цих простих )
- Обчислити .
- Далі йдуть дані зібрані для перших значень для яких є 23-гладкими.
- Візьмемо [2] Маємо
- Обчислимо
- Обчислимо
- Обчислимо
- Через те, що потрібно взяти наступну лінійну залежність.
- У випадку отримуємо такий самий вислід.
- Наступна
- Обчислимо
- Обчислимо
- Обчислимо
- Тепер, отже обчислимо Звідки, маємо два нетривіальних дільники для — і
Remove ads
Примітки
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads