Практичне заняття №3 (ТСО).
Мета заняття : Поглибити теоретичні знання і навчитися на практиці оцінювати складність алгоритмів факторизації.
Факторизація Ферма.
Вельми плідною ідеєю
при побудові алгоритмів факторизації є пошук чисел
і
,
для яких виконується співвідношення
.
Якщо при цьому
, то числа
і
суть нетривіальні дільники числа ![]()
Очевидно, першим в цьому напрямі є метод факторизації, застосований
П. Ферма. Він заснований на теоремі Ейлера про представлення числа у вигляді різниці двох квадратів.
Теорема. Якщо
- непарний, то існує взаємно однозначна відповідність
між розкладаннями на множники
,
і представлені у вигляді різниці квадратів
,
.
Ця відповідність має вигляд

Доказ очевидно.
Метод Ферма полягає в тому, що при малих
значеннях параметра
в
уявленні
можна знайти пару
, перебираючи як кандидатів на значення числа
числа
і перевіряючи для кожного з них рівність

Для отбраковки помилкових значень
можна скористатися тим, що якщо число не є квадратом,
то воно з великою вірогідністю не буде і квадратичним лишком для одного з
невеликих простих чисел
Остання властивість легко перевіряється шляхом обчислення відповідного
символу Лежандра.
Вхід:
непарне число,
невеликі
прості числа.
Крок 0. Перевірити
Якщо так, то дільник знайдений.
Крок 1. Для кожного
від
до
обчислити
величини ![]()
Крок 2. Якщо
хоч би для одного
виконано одну з умов:
і
не ділить
або
і 
то перейти до наступного
на
кроці 1. В протилежному випадку перейти до кроку 3.
Крок 3. Перевірити, чи
є повним квадратом. Якщо
то видати відповідь: «
складене».
Якщо
- не
повний квадрат, то перейти до наступного
на кроці 1.
Наприклад
Хай потрібно факторизувати число
Вхід 
Крок 0. 377
не ділиться на жодне ![]()
Крок 1.
.


![]()
![]()
...

(т.я.
);
![]()
![]()
![]()
Виконано умову
і
переходимо до наступного ![]()
(
, але
ділить
)
;
( т.к.
);

=1.
Умови
і
не ділить
або
і
не виконуються для жодного ![]()
Переходимо до кроку 3.
Перевіряємо, чи
є повним квадратом
=82
- складене ![]()
По суті даний алгоритм, подібно до методу „пробних
ділень”, є різновидом методу перебору всіх можливих дільників. Складність цього
алгоритму оцінюється величиною
.
Параметр
визначається з конкретних обчислювальних
можливостей. Чим більше значення
,
тим більше число можливих дільників буде перевірено. Проте, на відміну від
методу „пробних ділень”, за допомогою якого знаходиться найменший дільник,
даний метод дозволяє знаходити найбільшого дільника числа
, що не перевершує
Помітимо, що замість
можна брати
при малих значеннях ![]()
У багатьох випадках перехід до рівнянь
,
. дозволяє знайти шукане значення шляхом коротшого перебору значень
, чим при
.
При цьому, у разі успіху таке уявлення також дозволяє факторізовать число
, оскільки числа
лежать
в інтервалі
і задовольняють рівності 
Алгоритм Діксона.
У багатьох сучасних алгоритмах факторизації для
знаходження дільників використовується ідея Лежандра (1798 р.). що полягає в
пошуку чисел
и
,
що задовольняють умовам ![]()
Цей підхід є узагальненням методу Ферма, в якому потрібне виконання строгої рівності.
Для пошуку таких чисел використовується поняття факторної бази.
Назвемо факторною базою деяку множину
невеликих
простих чисел. Звичайно в якості
беруть
прості числа, що не перевершують деякої межі ![]()
Говоритимемо, що ціле число
є
-
числом, якщо число
розкладається на добуток простих чисел з факторної
бази.
.
Зіставимо кожному
-
числу вектор показників з цього розкладання

а також двійковий вектор,
одержаний з вектора
приведенням всіх його координат по модулю 2

Якщо тепер яким-небудь чином підібрати таке
меножество різних
- чисел
, при
якому виконується лінійне співвідношення 
то для добутку
виконується
співвідношення
![]()
де число
визначається
по векторах показників рівністю
![]()

Алгоритм Діксона полягає в наступному.
Крок 1. Вибрати випадкове
,
, і обчислити
.
Крок 2. Пробними
діленнями спробувати розкласти
на
прості множники з факторної бази.
Крок 3. Якщо
є
-числом,
тобто
,
то запам'ятати
і
Повторити
процедуру генерації чисел
до тих пір, поки не буде знайдено
- чисел
.
Крок 4.
Знайти . наприклад, вирішуючи за допомогою алгоритму послідовного виключення
невідомих Гауса однорідну систему лінійних рівнянь
відносно
невідомих співвідношень лінійної залежності
,![]()
Покласти
,![]()
![]()
![]()

Крок 5. Перевірити
Якщо
це так, то повторити процедуру генерації. Якщо ні, то знайдено нетривіальне
розкладання
![]()
Приклад. Хай потрібне факторізовать число ![]()
Хай
Фактор-база 2,3,5.
![]()
![]()
![]()
![]()
![]()
3. ![]()
![]()
![]()
![]()
![]()
![]()

![]()
![]()
![]()
НСД![]()
НСД![]()
![]()
![]()
![]()
НСД![]()
НСД![]()
На трудомісткість алгоритму Діксону істотно
впливає вибір бази, чинника. Якщо число
вибране
так, що
, то майже кожне
буде
-числом, але одержувані при цьому порівняння
будуть
тривіальними. Крім того, потрібно буде вирішувати системи від дуже великого
числа невідомих. Якщо
- мало, то
-
числа з'являтимуться дуже рідко.
Помітимо, що якщо
-
складене, то рівняння
має принаймні 4 рішення. Тому вірогідність
появи пари
з
не перевершує 1/2. Отже, повторюючи процедуру
набору для отримання потрібної пари
разів
ми одержимо, що надійність даного методу знаходження дільника не менша, ніж
.
Трудомісткість алгоритму Діксону оцінюється таким чином:

Через
позначено
![]()
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.