Топ питань
Часова шкала
Чат
Перспективи

Квадратичне решето

З Вікіпедії, вільної енциклопедії

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

Алгоритм

Вхід: ціле складене число , яке не є степенем простого.

Вихід: нетривіальний дільник для .

  1. Обираємо базу дільників де і є -е просте для якого є квадратичним залишком за модулем .
  2. Обчислити .
  3. Побудувати многочлен й обчислити значення для x . Просіяти побудований масив елементами факторної бази pi (та їх невеликими степенями).
  4. Серед близьких до нуля залишків у просіяному масиві знайти гладких чисел :
    Встановити . Поки робити наступне:
    1. Обчислити і перевірити послідовним діленням на елементи з чи є -гладким. Якщо ні, обираємо новий і повторюємо.
    2. Якщо є -гладким, скажімо тоді покласти , де для
  5. Серед векторів vi над полем Z2 знайти нетривіальну лінійну комбінацію, яка дорівнює нульовому вектору, тобто, непорожню підмножину таку, що . Коефіцієнти такої лінійної комбінації можна знайти шляхом розв'язання системи лінійних рівнянь.
  6. Обчислити
  7. Для кожного обчислити .
  8. Обчислити
  9. Якщо тоді знайти іншу непорожню підмножину таких, що і перейти до етапу 5. (У малоймовірному випадку, якщо підмножина не існує, замінити декілька з двійок новими парами (етап 3), і перейти на етап 4.
  10. Обчислити і повернути .
Remove ads

Приклад роботи

Алгоритм квадратичного решета для находження нетривіального дільника для

  1. Обираємо фактор-базу розміру і опущені з бо для цих простих )
  2. Обчислити .
  3. Далі йдуть дані зібрані для перших значень для яких є 23-гладкими.
Більше інформації , ...
  1. Візьмемо [2] Маємо
  2. Обчислимо
  3. Обчислимо
  4. Обчислимо
  5. Через те, що потрібно взяти наступну лінійну залежність.
  6. У випадку отримуємо такий самий вислід.
  7. Наступна
  8. Обчислимо
  9. Обчислимо
  10. Обчислимо
  11. Тепер, отже обчислимо Звідки, маємо два нетривіальних дільники для і
Remove ads

Примітки

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads