\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}