diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2022-12-29 15:20:32 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2022-12-29 15:20:32 +0400 |
| commit | 0be2be0a92f992bf8ee9eff701cb19658a1e7544 (patch) | |
| tree | 5d855004fd8cc067a594475c0a666eb01f0ceefa /report/lab11 | |
| parent | 056f59346b727c9367998a423551eaba52854fce (diff) | |
Diffstat (limited to 'report/lab11')
| -rw-r--r-- | report/lab11/images/test11.png | bin | 0 -> 449004 bytes | |||
| -rw-r--r-- | report/lab11/lab11.pdf | bin | 0 -> 483704 bytes | |||
| -rw-r--r-- | report/lab11/lab11.tex | 80 | ||||
| -rwxr-xr-x | report/lab11/maker.sh | 35 |
4 files changed, 115 insertions, 0 deletions
diff --git a/report/lab11/images/test11.png b/report/lab11/images/test11.png Binary files differnew file mode 100644 index 0000000..ed4a42f --- /dev/null +++ b/report/lab11/images/test11.png diff --git a/report/lab11/lab11.pdf b/report/lab11/lab11.pdf Binary files differnew file mode 100644 index 0000000..c4669a0 --- /dev/null +++ b/report/lab11/lab11.pdf diff --git a/report/lab11/lab11.tex b/report/lab11/lab11.tex new file mode 100644 index 0000000..9f74180 --- /dev/null +++ b/report/lab11/lab11.tex @@ -0,0 +1,80 @@ +\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{{Алгоритмы алгебры и теории чисел}\\{Лабораторная работа №11}}
+\author{Гущин Андрей, 431 группа, 1 подгруппа}
+\date{\the\year{} г.}
+
+\begin{document}
+
+\maketitle
+
+\section{Задача}
+Реализовать факторизацию Ферма.
+
+\section{Алгоритм}
+Ферма описал свой метод разложения больших чисел на множители. Он
+представлял собой первое реальное улучшение по сравнению с
+классическим методом попытки найти множитель $n$ путем деления на
+все простые числа, не превосходящие $\sqrt{n}$. В основе схемы
+факторизации Ферма лежит наблюдение, что поиск множителей нечетного
+целого числа $n$ (поскольку степени двойки легко распознаются и
+могут быть удалены в самом начале, нет никаких потерь в
+предположении, что $n$ нечетно) эквивалентен получению интегральных
+решений $x$ и $y$ уравнения $n = x^{2} - y^{2}$.
+
+Если $n$ --- разность двух квадратов, то очевидно, что $n$ можно разложить на
+множители как $n = x^{2}-y^{2} = (x+y)(x-y)$. И наоборот, когда $n$ имеет
+разложение $n = ab$, где $a \geq b \geq 1$, тогда мы можем записать $n =
+(\frac{a+b}{2})^{2}-(\frac{a-b}{2})^{2}$.
+
+Более того, поскольку $n$ считается нечетным целым числом, $a$ и $b$
+сами по себе нечетны и, следовательно, $\frac{a+b}{2}$ и
+$\frac{a-b}{2}$ будут целыми неотрицательными числами.
+
+Поиск возможных $x$ и $y$, удовлетворяющих уравнению $n=x^{2}-y^{2}$ или, что то
+же самое, уравнению $x^{2}-n=y^{2}$, начинают с определения наименьшее целое
+число $k$, для которого $k^{2} \geq n$. Рассмотрим последовательно числа
+$k^{2}-n$, $(k+1)^{2}-n$, $(k+2)^{2}-n$, $(k+3)^{2}-n$, $\ldots$, пока не будет
+найдено значение $m \geq n$, делающее $m^{2}-n$ квадратом. Процесс не может
+продолжаться бесконечно, потому что в конце концов мы придем к $
+(\frac{n+1}{2})^{2} - n = (\frac{n-1}{2})^{2}$ представлению $n$,
+соответствующее тривиальной факторизации $n=n.1$. Если эта точка достигается без
+обнаружения разности квадратов ранее, то $n$ не имеет других делителей, кроме
+$n$ и $1$, и в этом случае оно является простым числом.
+
+
+\section{Реализация}
+\inputminted{python}{../../lab11/lab11.py}
+
+
+\section{Тестирование}
+\begin{figure}[H]
+ \centering
+ \includegraphics[width=0.8\textwidth]{test11.png}
+\end{figure}
+
+\end{document}
diff --git a/report/lab11/maker.sh b/report/lab11/maker.sh new file mode 100755 index 0000000..e847acf --- /dev/null +++ b/report/lab11/maker.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +watch() { + [ -z "$1" ] && echo "Необходимо указать название основного документа" && help + set -o xtrace + latexmk -pdf -f -shell-escape -interaction=nonstopmode -pvc $1 +} + +doc() { + [ -z "$1" ] && echo "Необходимо указать название основного документа" && help + set -o xtrace + latexmk -pdf -f -shell-escape -interaction=nonstopmode $1 +} + +clean() { + set -o xtrace + rm -rf _minted-* + find . -name "*.aux" -exec rm {} \; + rm -f *.dvi *.fdb_latexmk *.fls *.log *.out *.toc +} + +help() { + echo "Использование:" + echo "./maker.sh watch <main-doc>.tex -> Запуск процесса, пересобирающего документ при изменениях" + echo "./maker.sh doc <main-doc>.tex -> Пересобрать документ" + echo "./maker.sh clean -> Удаление сгенерированных файлов" + exit 1 +} + +case "$1" in + watch) watch $2 ;; + doc) doc $2 ;; + clean) clean ;; + *) help ;; +esac |