From 0be2be0a92f992bf8ee9eff701cb19658a1e7544 Mon Sep 17 00:00:00 2001
From: Andrew Guschin <guschin.drew@gmail.com>
Date: Thu, 29 Dec 2022 15:20:32 +0400
Subject: =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B?=
 =?UTF-8?q?=20=D0=BB=D0=B0=D0=B1=D1=8B=208-15?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 report/lab12/lab12.tex | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)
 create mode 100644 report/lab12/lab12.tex

(limited to 'report/lab12/lab12.tex')

diff --git a/report/lab12/lab12.tex b/report/lab12/lab12.tex
new file mode 100644
index 0000000..8077040
--- /dev/null
+++ b/report/lab12/lab12.tex
@@ -0,0 +1,89 @@
+\documentclass[a4paper,oneside]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T2A]{fontenc}
+\usepackage[english,russian]{babel}
+
+\usepackage{amsmath}
+\usepackage{mathtools}
+\usepackage{amsfonts}
+\usepackage{enumitem}
+\usepackage{amsthm}
+\usepackage{minted}
+\setminted{fontsize=\small, breaklines=true, style=emacs, linenos}
+\usepackage{graphicx}
+\graphicspath{ {./images/} }
+\usepackage{float}
+
+\newtheorem{theorem}{Теорема}[subsection]
+\newtheorem*{theorem*}{Теорема}
+
+% --- Определение --- %
+\theoremstyle{definition}
+\newtheorem{definition}{Определение}[subsection]
+\newtheorem*{definition*}{Определение}
+% ------------------- %
+
+\title{{Алгоритмы алгебры и теории чисел}\\{Лабораторная работа №12}}
+\author{Гущин Андрей, 431 группа, 1 подгруппа}
+\date{\the\year{} г.}
+
+\begin{document}
+
+\maketitle
+
+\section{Задача}
+Осуществить факторизацию с помощью алгоритма Диксона.
+
+
+\section{Алгоритм}
+Алгоритм Диксона — алгоритм факторизации, использующий
+в своей основе идею Лежандра, заключающуюся в поиске пары целых чисел
+$x$ и $y$ таких, что $x^2 \equiv y^2\pmod{n}$ и $x \not\equiv \pm
+y\pmod{n}$. Он является обобщением метода Ферма.
+
+В общем виде алгоритм можно представить следующим образом:
+\begin{enumerate}
+    \item
+        Составить факторную базу ${\displaystyle \mathrm {B}
+        =\left\{{p_{1},p_{2},\dots ,p_{h}}\right\}}$, состоящую из всех
+        простых чисел ${\displaystyle p \leq M = L\left({n}\right)^{\frac
+        {1}{2}}}$, где ${\displaystyle L\left({n}\right)=\exp {\left({\sqrt
+        {\ln {n}\cdot \ln {\ln {n}}}}\right)}}$.
+    \item Выбрать такое случайное $b$, что $\sqrt{n}<b<n$.
+    \item Вычислить $a = b^2\bmod{n}$.
+    \item
+        Проверить число $a$ на гладкость пробными делениями. Если $a$ является
+        $\mathrm{B}$-гладким числом, то есть $a = \prod_{p\in
+        \mathrm{B}}p^{\alpha_{p}\left({b}\right)}$, следует запомнить вектора
+        $\vec{\alpha}(b)$ и $\vec{\varepsilon}(b)$
+    \item
+        Повторять процедуру генерации чисел $b$ до тех пор, пока не
+        будет найдено $h+1$ $\mathrm{B}$-гладких чисел $b_1,...,b_{h+1}$.
+    \item
+        Методом Гаусса найти линейную зависимость среди векторов
+        $\vec{\varepsilon}(b_1), \dots, \vec{\varepsilon}(b_{h+1})$ и положить:
+        \begin{align*}
+        x &= b_{i_1} \dots b_{i_t}\bmod{n} \\
+        y &= \prod_{p \in \mathrm{B}} 
+                p^{\frac{(\alpha_p (b_{i_1}) + \dots + \alpha_p(b_{i_t}))}{2}}\pmod{n}.
+        \end{align*}
+    \item
+        Проверить $x \equiv \pm y \pmod{n}$. Если это так, то повторить
+        процедуру генерации. Если нет, то найдено нетривиальное разложение:
+        \[{\displaystyle n=u\cdot v, u=gcd\left({x+y,n}\right),
+        v=gcd\left({x-y,n}\right).}\]
+\end{enumerate}
+
+
+\section{Реализация}
+\inputminted{python}{../../lab12/lab12.py}
+
+
+\section{Тестирование}
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.8\textwidth]{test12.png}
+\end{figure}
+
+\end{document}
-- 
cgit v1.2.3

