\documentclass[a4paper,oneside]{article}

\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\usepackage[english,russian]{babel}

\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{amsfonts}
\usepackage{enumitem}
\usepackage{amsthm}

\newtheorem{theorem}{Теорема}[subsection]
\newtheorem*{theorem*}{Теорема}

% --- Определение --- %
\theoremstyle{definition}
\newtheorem{definition}{Определение}[subsection]
\newtheorem*{definition*}{Определение}
% ------------------- %

\date{}


\title{Криптографические методы защиты информации, Лабораторная работа №3}
\author{Гущин Андрей, 431 группа, 1 подгруппа, 2 вариант}

\begin{document}

\maketitle

Факторизацией натурального числа называется его разложение в произведение
простых множителей. Существование и единственность (с точностью до порядка
следования множителей) такого разложения следует из \textbf{основной теоремы
арифметики}.

Простой перебор множителей является довольно неэффективным алгоритмом,
особенно для достаточно больших чисел. В таком случае необходимо выбрать другой
алгоритм разложения на множители.

Например, таким является алгоритм Шермана Лемана.

Пусть $n$ нечётно и $n > 8$.
\begin{enumerate}
    \item
        Для $a = 2, 3, \dots, \lfloor n^{1/3} \rfloor$ проверить условие
        $a | n$. Если на этом шаге не удалось разложить $n$ на множители,
        то переходим к следующему шагу.

    \item
        Если на предыдущем шаге делитель не найден и $n$ --- составное, то $n =
        pq$, где $p, q$ --- простые числа, и $n^{1/3} < p \leq q < n^{2/3}$.
        Тогда для всех $k = 1, 2, \dots, \lfloor n^{1/3} \rfloor$ и для всех
        $d = 0, \dots, \left\lfloor \frac{n^{1/6}}{4 \sqrt{k}} \right\rfloor + 1$
        проверить, является ли число $(\lfloor \sqrt{4kn} \rfloor + d)^2 - 4kn$
        квадратом натурального числа. Если является, то для $A = \lfloor \sqrt{4kn} \rfloor + d$ и
        $B = \sqrt{A^2 - 4kn}$ выполнено сравнение:
        \[ A^2 \equiv B^2 \pmod n \text{ или } (A - B)(A + B) \equiv 0 \pmod n \]

        В этом случае для $d^* = \gcd(A - B, n)$ проверяется неравенство
        $1 < d^* < n$. Если оно выполнено, то $n = d^* \cdot (n / d^*)$ --- разложение $n$ на два множителя.

        Если алгоритм не нашёл разложение $n$ на два множителя, то $n$ --- простое число.
\end{enumerate}

Можно заметить, что данный алгоритм имеет временную сложность $O(n^{1/3})$,
что является более эффективным результатом по сравнению с простым перебором
множителей, который имеет временную сложность $O(n^{1/2})$.

Рассмотрим алгоритм для $n_1 = 21894583143407671$. $\lfloor n_1^{1/3} \rfloor
= \lfloor 21894583143407671^{1/3} \rfloor = \lfloor 279755.66757 \rfloor =
279755$. Перебрав все простые числа $a = 2, 3, \dots, 279755$ и проверив
для каждого $(n_1 | a)$, я заметил, что ни одно из них не является простым
множителем числа 21894583143407671. Таким образом, переходим ко второму шагу
алгоритма.

Снова будем перебирать все числа $k = 1, 2, 3, \dots, 279755$ и для каждого $k$
вычислим значение $\left\lfloor \frac{n_1^{1/6}}{4 \sqrt{k}} \right\rfloor +
1 = \left\lfloor \frac{21894583143407671^{1/6}}{4 \cdot \sqrt{k}} \right\rfloor
+ 1 = \left\lfloor \frac{528.91934}{4 \cdot \sqrt{k}} \right\rfloor + 1$.

Далее необходимо перебрать все $d = 0, \dots, \left\lfloor \frac{n_1^{1/6}}{4
\sqrt{k}} \right\rfloor + 1$.

Пусть $k = 1$, $d_{max} = \left\lfloor \frac{528.91934}{4 \cdot \sqrt{1}}
\right\rfloor = \left\lfloor \frac{528.91934}{4} \right\rfloor =
\left\lfloor 132.22983 \right\rfloor = 132$

Для каждого $d = 0, \dots, 132$ необходимо проверить является ли число
$(\lfloor \sqrt{4kn} \rfloor + d)^2 - 4kn$ полным квадратом натурального числа.

Для $k = 1, d = 0$ это число равно $(\lfloor \sqrt{4 \cdot 1 \cdot
21894583143407671} \rfloor + 0)^2 - 4 \cdot 1 \cdot 21894583143407671 =
(\lfloor \sqrt{4 \cdot 1 \cdot 21894583143407671} \rfloor + 0)^2 - 4 \cdot 1
\cdot 21894583143407671 = (\lfloor 295936365.75053 \rfloor)^2 -
87578332573630688 = 295936365^2 - 87578332573630688 = -444217463$.

Отрицательное число не может быть квадратом натурального числа, поэтому
продолжаем перебор.

$\dots$

Пусть $k = 26304$, $d_{max} = \left\lfloor \frac{528.91934}{4 \cdot \sqrt{26304}}
\right\rfloor = \left\lfloor \frac{528.91934}{162.18508} \right\rfloor =
\left\lfloor 3.26121 \right\rfloor = 3$

$\dots$

Для $k = 26304, d = 1$ это число равно $(\lfloor \sqrt{4 \cdot 26304 \cdot
21894583143407671} \rfloor + 1)^2 - 4 \cdot 26304 \cdot 21894583143407671 =
(\lfloor \sqrt{2303660460016781511936} \rfloor + 1)^2 - 2303660460016781511936
= (\lfloor 47996462994.858086 \rfloor + 1)^2 - 2303660460016781511936 =
47996462995^2 - 2303660460016781511936 =
2303660460030404370025 - 2303660460016781511936 = 13622858089$.

Число 13622858089 является полным квадратом числа 116717.

Вычислим $A = \lfloor \sqrt{4 * k * n} \rfloor + d$ и $B = \sqrt{A^2 - 4kn}$:

$A = \lfloor \sqrt{4 \cdot 26304 \cdot 21894583143407671} \rfloor + 1 = 
47996462995$.

$B = \sqrt{47996462995^2 - 4 \cdot 26304 \cdot 21894583143407671} = 116717$.

Выполним сравнение $A^2 \equiv B^2 \pmod n$.

$47996462995^2 \equiv 116717^2 \pmod {21894583143407671} =
2303660460030404370025 \equiv 13622858089 \pmod {21894583143407671} =
13622858089 \equiv 13622858089 \pmod {21894583143407671}$.

Так как это выражение верно, вычислим $d^* = \gcd(A - B, n) =
\gcd(47996462995 - 116717, 21894583143407671) =
\gcd(47996346278, 21894583143407671) = 175169147$

Для данного $d^*$ выполняется равенство $1 < d^* < n$, значит это число является
множителем числа $n$, а вторым множителем является число $n / d^* = 124991093$.


\end{document}
