\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{{Алгоритмы алгебры и теории чисел}\\{Лабораторная работа №6}} \author{Гущин Андрей, 431 группа, 1 подгруппа} \date{\the\year{} г.} \begin{document} \maketitle \section{Задача} Осуществить проверку чисел на простоту с помощью теста Соловея"=Штрассена. \section{Алгоритм} Тест Соловея"=Штрассена опирается на малую теорему Ферма и свойства символа Якоби: Если $n$ --- нечетное составное число, то количество целых чисел $a$, взаимнопростых с $n$ и меньших $n$, удовлетворяющих сравнению $a^{(n - 1) / 2} \equiv \left(\frac{a}{n}\right) \pmod{n}$, не превосходит $\frac{n}{2}$, где $\left(\frac{a}{n}\right)$ --- символ Якоби. Алгоритм Соловея"=Штрассена параметризуется количеством раундов $k$. В каждом раунде случайным образом выбирается число $a < n$. Если $\text{НОД} (a, n) > 1$, то выносится решение, что $n$ составное. Иначе проверяется справедливость сравнения $\displaystyle a^{(n - 1) / 2}\equiv \left(\frac{a}{n}\right) \pmod {n}$. Если оно не выполняется, то выносится решение, что $n$ --- составное. Если это сравнение выполняется, то $a$ является свидетелем простоты числа $n$. Далее выбирается другое случайное $a$ и процедура повторяется. После нахождения $k$ свидетелей простоты в $k$ раундах выносится заключение, что $n$ является простым числом с вероятностью $\displaystyle 1 - 2^{-k}$. \section{Реализация} Для реализации вычисления символа Якоби необходимо было реализовать вычисление символа Лежандра, а также использовать некоторый алгоритм факторизации числа. Для факторизации был выбран и реализован алгоритм Лемана. \inputminted[fontsize=\small, breaklines=true, style=emacs, linenos]{rust}{../../lab6/src/main.rs} \section{Тестирование} \begin{figure}[H] \centering \includegraphics[width=\textwidth]{test.png} \end{figure} \end{document}