<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0+%D0%94%D0%B8%D0%BD%D0%B0</id>
	<title>Алговики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0+%D0%94%D0%B8%D0%BD%D0%B0"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0"/>
	<updated>2026-10-22T23:11:05Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24789</id>
		<title>Участник:Кинжикеева Дина/ Алгоритм решения линейной системы сравнений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24789"/>
		<updated>2017-12-01T06:20:28Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:Алгоритм: Алгоритм решения линейной системы сравнений.&lt;br /&gt;
:Исполнитель: Кинжикеева Дина.&lt;br /&gt;
&lt;br /&gt;
==  Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
Введем некоторые определения.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 1&#039;&#039;&#039; Пусть &#039;&#039;m&#039;&#039; целое число большее единицы (&#039;&#039;m&#039;&#039;&amp;gt;1). Говорят, что &#039;&#039;a&#039;&#039; &#039;&#039;сравнимо&#039;&#039; с &#039;&#039;b&#039;&#039; по &#039;&#039;модулю&#039;&#039; &#039;&#039;m&#039;&#039;, если &#039;&#039;m&#039;&#039; делит (&#039;&#039;a&#039;&#039;-&#039;&#039;b&#039;&#039;) (обозначение: &#039;&#039;m|(a-b)&#039;&#039;), а именно выполняется равенство: &#039;&#039;a = b+tm&#039;&#039;, где &#039;&#039;t&#039;&#039; некоторое целое число. Сравнение записывает таким образом: &amp;lt;math&amp;gt; a &amp;amp;equiv; b &amp;amp;#8194; (mod	&amp;amp;#8194; m) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 2&#039;&#039;&#039; Число НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) называется &#039;&#039;наибольшим общим делителем&#039;&#039; двух чисел &#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039; если:&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) делит оба числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;;&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) является наибольшим общим делителем чисел &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;, то если &#039;&#039;d|a&#039;&#039; и &#039;&#039;d|b&#039;&#039;, то &#039;&#039;d|&#039;&#039;НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) (или, что то же самое, &#039;&#039;d&#039;&#039; меньше либо равно НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 3&#039;&#039;&#039; Числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039; называются &#039;&#039;взаимно простыми&#039;&#039;, если НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)=1.&lt;br /&gt;
   &lt;br /&gt;
Задана линейная система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;&amp;amp;#8194; m_1,m_2,...,m_n &amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; &amp;amp;#8194; a_1, a_2,..., a_n&amp;lt;/math&amp;gt; -некоторые целые числа.&lt;br /&gt;
Рассматривается задача решения линейной системы сравнений вида, описанного выше. Данная система сравнений имеет единственное решение по модулю &amp;lt;math&amp;gt;M=m_1m_2...m_n &amp;lt;/math&amp;gt; по китайской теореме об остатках. Эта теорема утверждает, что можно восстановить целое число по множеству его остатков от деления числа из некоторого набора попарно взаимно простых чисел. Теорема в её арифметической формулировке была описана в трактате китайского математика Сунь Цзы, предположительно датируемом третьим веком н. э. и затем была обобщена Цинь Цзюшао в его книге «Математические рассуждения в 9 главах» датируемой 1247 годом, где было приведено точное решение. Утверждение этой теоремы можно рассматривать как алгоритм решения линейной системы сравнений требуемого вида. &lt;br /&gt;
Искомое решение ищется как сумма вида:&lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Алгоритм строится на утверждении китайской теоремы об остатках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&amp;lt;/u&amp;gt; &#039;&#039;(Китайская теорема об остатках)&#039;&#039;&lt;br /&gt;
:Пусть &amp;lt;math&amp;gt;m_1,m_2,...,m_n&amp;lt;/math&amp;gt; натуральные числа такие, что НОД(&amp;lt;math&amp;gt;m_i,m_j&amp;lt;/math&amp;gt;)=1, при &amp;lt;math&amp;gt;i≠j&amp;lt;/math&amp;gt; для любых &amp;lt;math&amp;gt;i,j=1,2,..,n&amp;lt;/math&amp;gt;. И пусть &amp;lt;math&amp;gt;a_1,a_2,...,a_n&amp;lt;/math&amp;gt; целые числа. Тогда система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:имеет единственное решение по модулю числа &amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;(1), &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;u&amp;gt;Доказательство.&amp;lt;/u&amp;gt; Докажем существование решения, а именно, что решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; удовлетворяет заданной системе сравнений. Рассмотрим &amp;lt;math&amp;gt;x &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Все слагаемые в сумме (1), кроме первого, делятся на &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt;, а первое слагаемое &amp;lt;math&amp;gt;a_1M_1N_1  &amp;amp;equiv; a_1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;M_1N_1&amp;amp;equiv;1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Таким образом, &amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;. Аналогичным образом для &amp;lt;math&amp;gt;m_2,..,m_n&amp;lt;/math&amp;gt;. Следовательно, &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; -решение.  &lt;br /&gt;
Покажем единственность решения. Пусть существуют два различных решения системы &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;. &lt;br /&gt;
:&amp;lt;math&amp;gt;x_0=x_1-x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
Тогда для любого &amp;lt;math&amp;gt;i=1,..,n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;&amp;amp;#8194; m_i|x_0&amp;lt;/math&amp;gt;, а следовательно и &amp;lt;math&amp;gt;M|x_0&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;M|(x_1-x_2)&amp;lt;/math&amp;gt;). Это означает, что &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; можно представить в виде: &amp;lt;math&amp;gt;x_1=x_2+kM&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; некоторое целое число. Следовательно, &amp;lt;math&amp;gt;x_1=x_2 &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;, что и требовалось доказать. Теорема доказана.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поэтапное описание алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Вычисление значения &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;&lt;br /&gt;
#Вычисление значений &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;, для всех &amp;lt;math&amp;gt;i=1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt;&lt;br /&gt;
#Нахождение обратных элементов к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по соответствующему модулю при помощи алгоритма Евклида. Описание расширенного алгоритма Евклида:&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; b) &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=a &amp;amp;#8194; t_1=b &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=t_1q_1+t_2&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_1=t_2q_2+t_3&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;...&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-2}=t_{k-1}q_{k-1}+t_{k} &amp;amp;#8194; t_{k}=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-1}=t_{k}q_{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_0=1 &amp;amp;#8194; p_1=q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_j=q_jp_{j-1}+p_{j-2} &amp;amp;#8194; j=2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}=(-1)^{k+1}p_{k-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Формирование итогового ответа.&lt;br /&gt;
#:&amp;lt;math&amp;gt; x=a_1 M_1 N_1+...+a_n M_n N_n &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро алгоритма составляет определение для каждого числа &amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt; , &amp;lt;math&amp;gt;i=1,..., n&amp;lt;/math&amp;gt;, обратного к нему числа по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; при помощи расширенного алгоритма Евклида.  &lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В алгоритм последовательно входят следующие макроструктуры: &lt;br /&gt;
#Вычисление &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; как произведение всех &amp;lt;math&amp;gt;m_j&amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt;j&amp;amp;#8800;i,&amp;amp;#8194;j =1, ...,n &amp;lt;/math&amp;gt;;&lt;br /&gt;
#Вычисление обратного числа к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по расширенному алгоритму Евклида; &lt;br /&gt;
#Суммирование произведений вида &amp;lt;math&amp;gt;a_i M_i N_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;, по модулю &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Общая схема реализации программы:&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M=M*m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_i=M/m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_{i}^{-1}=РасширенныйАлгоритмЕвклида(M_i,m_i);&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;x=x+a_i*M_i*M_{i}^{-1};&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x=x&amp;amp;#8194; mod &amp;amp;#8194; M;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Предлагаемая реализация Расширенного Алгоритма Евклида (С/С++):&lt;br /&gt;
:int inverse(int a, int m) {//a&amp;lt;m&lt;br /&gt;
::int c,cur=0, q,p0=0,p1=1,p2,m0=m;&lt;br /&gt;
::while (a) {&lt;br /&gt;
:::cur++;&lt;br /&gt;
:::c = m % a;&lt;br /&gt;
:::q = (m-c)/a;&lt;br /&gt;
:::p2 = q*p1+p0;&lt;br /&gt;
:::p0 = p1;&lt;br /&gt;
:::p1 = p2;&lt;br /&gt;
:::m = a;&lt;br /&gt;
:::a = c;&lt;br /&gt;
::}&lt;br /&gt;
::if (m==1) {&lt;br /&gt;
:::if (cur%2) &lt;br /&gt;
::::return p0;  &lt;br /&gt;
:::return m0-p0;&lt;br /&gt;
:::}&lt;br /&gt;
::return -1;&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Последовательная сложность алгоритма составляет &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; равен максимальному значению &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;. Основная сложность приходится на расчет обратного элемента к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; по расширенному Алгоритму Евклида, т.к при работе алгоритма Евклида (не расширенного) совершается максимальное число шагов &amp;lt;math&amp;gt;log(max\{a,b\})&amp;lt;/math&amp;gt;, когда подаются на вход числа &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; взаимно простые (по условию данной задачи рассматриваются только такие числа), и число шагов в расширенном алгоритме совпадает, то исходя из предложенной реализации расширенного Алгоритма Евклида сложность его работы составит &amp;lt;math&amp;gt;3logk&amp;lt;/math&amp;gt;. Всего данный алгоритм будет отрабатывать &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; раз, следовательно сложность Алгоритм решения линейной системы сравнений составит &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Описание графа алгоримта. В графе алгоритма в яросно-параллельной форме выделяется 3 яруса (см. рис.1). &#039;&#039;&#039;Первый ярус&#039;&#039;&#039;: расчет &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;. &#039;&#039;&#039;Второй ярус&#039;&#039;&#039;: умножение вида &amp;lt;math&amp;gt;M_ia_i&amp;lt;/math&amp;gt;. &#039;&#039;&#039;Третий ярус&#039;&#039;&#039;: растчет &amp;lt;math&amp;gt;M_{i}^{-1}&amp;lt;/math&amp;gt; по расширенному Алгоритму Евклида, и формирование  итогового ответа как сумму &amp;lt;math&amp;gt;M_ia_iM_{i}^{-1}&amp;lt;/math&amp;gt;. Во всех ярусах &amp;lt;math&amp;gt;i=1, ..., n&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Файл:1.png|400px|thumb|center|рис.1 Информационный граф. Оранжевый- операция 1 (п. 1.2); желтый -операции 2 (п. 1.2); зеленый- операция умножения на ai ;синий-операции 3 (п. 1.2), голубой -операция 4 (п. 1.2).]]&lt;br /&gt;
&lt;br /&gt;
Входные данные  &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; подаются на первый ярус, &amp;lt;math&amp;gt;a_i&amp;lt;/math&amp;gt; -на второй (см. рис.2).    &lt;br /&gt;
&lt;br /&gt;
[[Файл:2.png|400px|thumb|center|рис.2 Информационный граф с изображением входных данных.] Оранжевый- операция 1 (п. 1.2); желтый -операции 2 (п. 1.2); зеленый- операция умножения на ai ;синий-операции 3 (п. 1.2), голубой -операция 4 (п. 1.2).]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Для реализации алгоритма решения линейной системы сравнений потребуется выполнить последовательно следующие ярусы:&lt;br /&gt;
*n раз первый ярус&lt;br /&gt;
*1 раз второй ярус&lt;br /&gt;
*&amp;lt;math&amp;gt;3*log(k)+n&amp;lt;/math&amp;gt; раз третий ярус,  где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; равен максимальному значению &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;. &lt;br /&gt;
Таким образом параллельная сложность алгоритма составит &amp;lt;math&amp;gt;3logk+2n+1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; пар числе &amp;lt;math&amp;gt;(a_i, m_i)&amp;lt;/math&amp;gt;, соответствующая линейному сравнению вида  &amp;lt;math&amp;gt; x &amp;amp;equiv; a_i &amp;amp;#8194;(mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;   , где &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; a_i&amp;lt;/math&amp;gt; -некоторые целые числа, &amp;lt;math&amp;gt;i=1, ..., n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;2n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; число &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; - решение линейной системы сравнений.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Исследование масштабируемости проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot;&amp;lt;ref name=&amp;quot;Lom&amp;quot;&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, N 7, С. 36-39.&amp;lt;/ref&amp;gt; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета]. Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
* Число MPI процессов: [1:128] с шагом по степеням 2;&lt;br /&gt;
* Размер входа: [1000:10000000], число пар &amp;lt;math&amp;gt;(a_i,m_i)&amp;lt;/math&amp;gt;, задаваемых одно сравнение. &lt;br /&gt;
&lt;br /&gt;
[[Файл:21.png|400px|thumb|center|рис.3 График сильной масштабируемости. Диапазон[0:10000000]-число входных данных, диапазон[0:140]-число процессоров, диапазон[0:2000000000]-производительность.]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:22.png|400px|thumb|center|рис.4 График слабой масштабируемости. Диапазон[0:10000000]-число входных данных, диапазон[0:140]-число процессоров, диапазон[0:1800000000]-производительность.]]&lt;br /&gt;
&lt;br /&gt;
На основе параллельной реализации  алгоритма производительность  с ростом числа процессов увеличивается, а при приближении к числу процессов 64-128 , в зависимости от числа входных данных, начинает уменьшаться. Это объясняется использованием коллективных операций  для расчета произведения всех модулей, по которым производятся вычисления, а также для формирования итогового ответа, а траты на коммуникационные обмены существенно возрастают с ростом числа использованных процессов. Ускорение производимых вычислений  на каждом процессоре не компенсирует траты на коммуникационные обмены. &lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации данного алгоритма решения системы линейных сравнений на основе утверждения китайской теоремы об остатках не было найдено.  &lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
#Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, N 7, С. 36-39.&lt;br /&gt;
#Применко Э.А. Алгебраические основы криптографии: Учебное пособие. M.:Книжный Дом &amp;quot;ЛИБРОКОМ&amp;quot;,2013.-288с.&lt;br /&gt;
#Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И. Защита информации: учебное пособие — М.: МФТИ, 2011. — 225 с. — ISBN 978-5-7417-0377-9&lt;br /&gt;
#Переславцева О. Н. Распараллеливание алгоритмов с применением китайской теоремы об остатках. — Вестник ТГУ, 2009. — № 4. — ISSN 1810-0198.&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24773</id>
		<title>Участник:Кинжикеева Дина/ Алгоритм решения линейной системы сравнений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24773"/>
		<updated>2017-11-30T23:11:13Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:Алгоритм: Алгоритм решения линейной системы сравнений.&lt;br /&gt;
:Исполнитель: Кинжикеева Дина.&lt;br /&gt;
&lt;br /&gt;
==  Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
Введем некоторые определения.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 1&#039;&#039;&#039; Пусть &#039;&#039;m&#039;&#039; целое число большее единицы (&#039;&#039;m&#039;&#039;&amp;gt;1). Говорят, что &#039;&#039;a&#039;&#039; &#039;&#039;сравнимо&#039;&#039; с &#039;&#039;b&#039;&#039; по &#039;&#039;модулю&#039;&#039; &#039;&#039;m&#039;&#039;, если &#039;&#039;m&#039;&#039; делит (&#039;&#039;a&#039;&#039;-&#039;&#039;b&#039;&#039;) (обозначение: &#039;&#039;m|(a-b)&#039;&#039;), а именно выполняется равенство: &#039;&#039;a = b+tm&#039;&#039;, где &#039;&#039;t&#039;&#039; некоторое целое число. Сравнение записывает таким образом: &amp;lt;math&amp;gt; a &amp;amp;equiv; b &amp;amp;#8194; (mod	&amp;amp;#8194; m) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 2&#039;&#039;&#039; Число НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) называется &#039;&#039;наибольшим общим делителем&#039;&#039; двух чисел &#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039; если:&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) делит оба числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;;&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) является наибольшим общим делителем чисел &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;, то если &#039;&#039;d|a&#039;&#039; и &#039;&#039;d|b&#039;&#039;, то &#039;&#039;d|&#039;&#039;НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) (или, что то же самое, &#039;&#039;d&#039;&#039; меньше либо равно НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 3&#039;&#039;&#039; Числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039; называются &#039;&#039;взаимно простыми&#039;&#039;, если НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)=1.&lt;br /&gt;
   &lt;br /&gt;
Задана линейная система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;&amp;amp;#8194; m_1,m_2,...,m_n &amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; &amp;amp;#8194; a_1, a_2,..., a_n&amp;lt;/math&amp;gt; -некоторые целые числа.&lt;br /&gt;
Рассматривается задача решения линейной системы сравнений вида, описанного выше. Данная система сравнений имеет единственное решение по модулю &amp;lt;math&amp;gt;M=m_1m_2...m_n &amp;lt;/math&amp;gt; по китайской теореме об остатках. Эта теорема утверждает, что можно восстановить целое число по множеству его остатков от деления числа из некоторого набора попарно взаимно простых чисел. Теорема в её арифметической формулировке была описана в трактате китайского математика Сунь Цзы, предположительно датируемом третьим веком н. э. и затем была обобщена Цинь Цзюшао в его книге «Математические рассуждения в 9 главах» датируемой 1247 годом, где было приведено точное решение. Утверждение этой теоремы можно рассматривать как алгоритм решения линейной системы сравнений требуемого вида. &lt;br /&gt;
Искомое решение ищется как сумма вида:&lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Алгоритм строится на утверждении китайской теоремы об остатках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&amp;lt;/u&amp;gt; &#039;&#039;(Китайская теорема об остатках)&#039;&#039;&lt;br /&gt;
:Пусть &amp;lt;math&amp;gt;m_1,m_2,...,m_n&amp;lt;/math&amp;gt; натуральные числа такие, что НОД(&amp;lt;math&amp;gt;m_i,m_j&amp;lt;/math&amp;gt;)=1, при &amp;lt;math&amp;gt;i≠j&amp;lt;/math&amp;gt; для любых &amp;lt;math&amp;gt;i,j=1,2,..,n&amp;lt;/math&amp;gt;. И пусть &amp;lt;math&amp;gt;a_1,a_2,...,a_n&amp;lt;/math&amp;gt; целые числа. Тогда система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:имеет единственное решение по модулю числа &amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;(1), &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;u&amp;gt;Доказательство.&amp;lt;/u&amp;gt; Докажем существование решения, а именно, что решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; удовлетворяет заданной системе сравнений. Рассмотрим &amp;lt;math&amp;gt;x &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Все слагаемые в сумме (1), кроме первого, делятся на &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt;, а первое слагаемое &amp;lt;math&amp;gt;a_1M_1N_1  &amp;amp;equiv; a_1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;M_1N_1&amp;amp;equiv;1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Таким образом, &amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;. Аналогичным образом для &amp;lt;math&amp;gt;m_2,..,m_n&amp;lt;/math&amp;gt;. Следовательно, &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; -решение.  &lt;br /&gt;
Покажем единственность решения. Пусть существуют два различных решения системы &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;. &lt;br /&gt;
:&amp;lt;math&amp;gt;x_0=x_1-x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
Тогда для любого &amp;lt;math&amp;gt;i=1,..,n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;&amp;amp;#8194; m_i|x_0&amp;lt;/math&amp;gt;, а следовательно и &amp;lt;math&amp;gt;M|x_0&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;M|(x_1-x_2)&amp;lt;/math&amp;gt;). Это означает, что &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; можно представить в виде: &amp;lt;math&amp;gt;x_1=x_2+kM&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; некоторое целое число. Следовательно, &amp;lt;math&amp;gt;x_1=x_2 &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;, что и требовалось доказать. Теорема доказана.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поэтапное описание алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Вычисление значения &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;&lt;br /&gt;
#Вычисление значений &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;, для всех &amp;lt;math&amp;gt;i=1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt;&lt;br /&gt;
#Нахождение обратных элементов к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по соответствующему модулю при помощи алгоритма Евклида. Описание расширенного алгоритма Евклида:&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; b) &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=a &amp;amp;#8194; t_1=b &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=t_1q_1+t_2&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_1=t_2q_2+t_3&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;...&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-2}=t_{k-1}q_{k-1}+t_{k} &amp;amp;#8194; t_{k}=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-1}=t_{k}q_{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_0=1 &amp;amp;#8194; p_1=q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_j=q_jp_{j-1}+p_{j-2} &amp;amp;#8194; j=2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}=(-1)^{k+1}p_{k-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Формирование итогового ответа.&lt;br /&gt;
#:&amp;lt;math&amp;gt; x=a_1 M_1 N_1+...+a_n M_n N_n &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро алгоритма составляет определение для каждого числа &amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt; , &amp;lt;math&amp;gt;i=1,..., n&amp;lt;/math&amp;gt;, обратного к нему числа по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; при помощи расширенного алгоритма Евклида.  &lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В алгоритм последовательно входят следующие макроструктуры: &lt;br /&gt;
#Вычисление &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; как произведение всех &amp;lt;math&amp;gt;m_j&amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt;j&amp;amp;#8800;i,&amp;amp;#8194;j =1, ...,n &amp;lt;/math&amp;gt;;&lt;br /&gt;
#Вычисление обратного числа к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по расширенному алгоритму Евклида; &lt;br /&gt;
#Суммирование произведений вида &amp;lt;math&amp;gt;a_i M_i N_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;, по модулю &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Общая схема реализации программы:&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M=M*m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_i=M/m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_{i}^{-1}=РасширенныйАлгоритмЕвклида(M_i,m_i);&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;x=x+a_i*M_i*M_{i}^{-1};&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x=x&amp;amp;#8194; mod &amp;amp;#8194; M;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Предлагаемая реализация Расширенного Алгоритма Евклида (С/С++):&lt;br /&gt;
:int inverse(int a, int m) {//a&amp;lt;m&lt;br /&gt;
::int c,cur=0, q,p0=0,p1=1,p2,m0=m;&lt;br /&gt;
::while (a) {&lt;br /&gt;
:::cur++;&lt;br /&gt;
:::c = m % a;&lt;br /&gt;
:::q = (m-c)/a;&lt;br /&gt;
:::p2 = q*p1+p0;&lt;br /&gt;
:::p0 = p1;&lt;br /&gt;
:::p1 = p2;&lt;br /&gt;
:::m = a;&lt;br /&gt;
:::a = c;&lt;br /&gt;
::}&lt;br /&gt;
::if (m==1) {&lt;br /&gt;
:::if (cur%2) &lt;br /&gt;
::::return p0;  &lt;br /&gt;
:::return m0-p0;&lt;br /&gt;
:::}&lt;br /&gt;
::return -1;&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Последовательная сложность алгоритма составляет &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; равен максимальному значению &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;. Основная сложность приходится на расчет обратного элемента к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; по расширенному Алгоритму Евклида, т.к при работе алгоритма Евклида (не расширенного) совершается максимальное число шагов &amp;lt;math&amp;gt;log(max\{a,b\})&amp;lt;/math&amp;gt;, когда подаются на вход числа &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; взаимно простые (по условию данной задачи рассматриваются только такие числа), и число шагов в расширенном алгоритме совпадает, то исходя из предложенной реализации расширенного Алгоритма Евклида сложность его работы составит &amp;lt;math&amp;gt;3logk&amp;lt;/math&amp;gt;. Всего данный алгоритм будет отрабатывать &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; раз, следовательно сложность Алгоритм решения линейной системы сравнений составит &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Описание графа алгоримта. В графе алгоритма в яросно-параллельной форме выделяется 3 яруса (см. рис.1). &#039;&#039;&#039;Первый ярус&#039;&#039;&#039;: расчет &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;. &#039;&#039;&#039;Второй ярус&#039;&#039;&#039;: умножение вида &amp;lt;math&amp;gt;M_ia_i&amp;lt;/math&amp;gt;. &#039;&#039;&#039;Третий ярус&#039;&#039;&#039;: растчет &amp;lt;math&amp;gt;M_{i}^{-1}&amp;lt;/math&amp;gt; по расширенному Алгоритму Евклида, и формирование  итогового ответа как сумму &amp;lt;math&amp;gt;M_ia_iM_{i}^{-1}&amp;lt;/math&amp;gt;. Во всех ярусах &amp;lt;math&amp;gt;i=1, ..., n&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Файл:1.png|400px|thumb|center|рис.1 Информационный граф. Оранжевый- операция 1 (п. 1.2); желтый -операции 2 (п. 1.2); зеленый- операция умножения на ai ;синий-операции 3 (п. 1.2), голубой -операция 4 (п. 1.2).]]&lt;br /&gt;
&lt;br /&gt;
Входные данные  &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; подаются на первый ярус, &amp;lt;math&amp;gt;a_i&amp;lt;/math&amp;gt; -на второй (см. рис.2).    &lt;br /&gt;
&lt;br /&gt;
[[Файл:2.png|400px|thumb|center|рис.2 Информационный граф с изображением входных данных.] Оранжевый- операция 1 (п. 1.2); желтый -операции 2 (п. 1.2); зеленый- операция умножения на ai ;синий-операции 3 (п. 1.2), голубой -операция 4 (п. 1.2).]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Для реализации алгоритма решения линейной системы сравнений потребуется выполнить последовательно следующие ярусы:&lt;br /&gt;
*n раз первый ярус&lt;br /&gt;
*1 раз второй ярус&lt;br /&gt;
*&amp;lt;math&amp;gt;3*log(k)+n&amp;lt;/math&amp;gt; раз третий ярус,  где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; равен максимальному значению &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;. &lt;br /&gt;
Таким образом параллельная сложность алгоритма составит &amp;lt;math&amp;gt;3logk+2n+1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; пар числе &amp;lt;math&amp;gt;(a_i, m_i)&amp;lt;/math&amp;gt;, соответствующая линейному сравнению вида  &amp;lt;math&amp;gt; x &amp;amp;equiv; a_i &amp;amp;#8194;(mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;   , где &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; a_i&amp;lt;/math&amp;gt; -некоторые целые числа, &amp;lt;math&amp;gt;i=1, ..., n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;2n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; число &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; - решение линейной системы сравнений.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
#Применко Э.А. Алгебраические основы криптографии: Учебное пособие. M.:Книжный Дом &amp;quot;ЛИБРОКОМ&amp;quot;,2013.-288с.&lt;br /&gt;
#Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И. Защита информации: учебное пособие — М.: МФТИ, 2011. — 225 с. — ISBN 978-5-7417-0377-9&lt;br /&gt;
#Переславцева О. Н. Распараллеливание алгоритмов с применением китайской теоремы об остатках. — Вестник ТГУ, 2009. — № 4. — ISSN 1810-0198.&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24771</id>
		<title>Участник:Кинжикеева Дина/ Алгоритм решения линейной системы сравнений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24771"/>
		<updated>2017-11-30T23:01:40Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:Алгоритм: Алгоритм решения линейной системы сравнений.&lt;br /&gt;
:Исполнитель: Кинжикеева Дина.&lt;br /&gt;
&lt;br /&gt;
==  Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
Введем некоторые определения.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 1&#039;&#039;&#039; Пусть &#039;&#039;m&#039;&#039; целое число большее единицы (&#039;&#039;m&#039;&#039;&amp;gt;1). Говорят, что &#039;&#039;a&#039;&#039; &#039;&#039;сравнимо&#039;&#039; с &#039;&#039;b&#039;&#039; по &#039;&#039;модулю&#039;&#039; &#039;&#039;m&#039;&#039;, если &#039;&#039;m&#039;&#039; делит (&#039;&#039;a&#039;&#039;-&#039;&#039;b&#039;&#039;) (обозначение: &#039;&#039;m|(a-b)&#039;&#039;), а именно выполняется равенство: &#039;&#039;a = b+tm&#039;&#039;, где &#039;&#039;t&#039;&#039; некоторое целое число. Сравнение записывает таким образом: &amp;lt;math&amp;gt; a &amp;amp;equiv; b &amp;amp;#8194; (mod	&amp;amp;#8194; m) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 2&#039;&#039;&#039; Число НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) называется &#039;&#039;наибольшим общим делителем&#039;&#039; двух чисел &#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039; если:&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) делит оба числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;;&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) является наибольшим общим делителем чисел &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;, то если &#039;&#039;d|a&#039;&#039; и &#039;&#039;d|b&#039;&#039;, то &#039;&#039;d|&#039;&#039;НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) (или, что то же самое, &#039;&#039;d&#039;&#039; меньше либо равно НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 3&#039;&#039;&#039; Числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039; называются &#039;&#039;взаимно простыми&#039;&#039;, если НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)=1.&lt;br /&gt;
   &lt;br /&gt;
Задана линейная система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;&amp;amp;#8194; m_1,m_2,...,m_n &amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; &amp;amp;#8194; a_1, a_2,..., a_n&amp;lt;/math&amp;gt; -некоторые целые числа.&lt;br /&gt;
Рассматривается задача решения линейной системы сравнений вида, описанного выше. Данная система сравнений имеет единственное решение по модулю &amp;lt;math&amp;gt;M=m_1m_2...m_n &amp;lt;/math&amp;gt; по китайской теореме об остатках. Эта теорема утверждает, что можно восстановить целое число по множеству его остатков от деления числа из некоторого набора попарно взаимно простых чисел. Теорема в её арифметической формулировке была описана в трактате китайского математика Сунь Цзы, предположительно датируемом третьим веком н. э. и затем была обобщена Цинь Цзюшао в его книге «Математические рассуждения в 9 главах» датируемой 1247 годом, где было приведено точное решение. Утверждение этой теоремы можно рассматривать как алгоритм решения линейной системы сравнений требуемого вида. &lt;br /&gt;
Искомое решение ищется как сумма вида:&lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Алгоритм строится на утверждении китайской теоремы об остатках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&amp;lt;/u&amp;gt; &#039;&#039;(Китайская теорема об остатках)&#039;&#039;&lt;br /&gt;
:Пусть &amp;lt;math&amp;gt;m_1,m_2,...,m_n&amp;lt;/math&amp;gt; натуральные числа такие, что НОД(&amp;lt;math&amp;gt;m_i,m_j&amp;lt;/math&amp;gt;)=1, при &amp;lt;math&amp;gt;i≠j&amp;lt;/math&amp;gt; для любых &amp;lt;math&amp;gt;i,j=1,2,..,n&amp;lt;/math&amp;gt;. И пусть &amp;lt;math&amp;gt;a_1,a_2,...,a_n&amp;lt;/math&amp;gt; целые числа. Тогда система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:имеет единственное решение по модулю числа &amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;(1), &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;u&amp;gt;Доказательство.&amp;lt;/u&amp;gt; Докажем существование решения, а именно, что решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; удовлетворяет заданной системе сравнений. Рассмотрим &amp;lt;math&amp;gt;x &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Все слагаемые в сумме (1), кроме первого, делятся на &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt;, а первое слагаемое &amp;lt;math&amp;gt;a_1M_1N_1  &amp;amp;equiv; a_1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;M_1N_1&amp;amp;equiv;1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Таким образом, &amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;. Аналогичным образом для &amp;lt;math&amp;gt;m_2,..,m_n&amp;lt;/math&amp;gt;. Следовательно, &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; -решение.  &lt;br /&gt;
Покажем единственность решения. Пусть существуют два различных решения системы &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;. &lt;br /&gt;
:&amp;lt;math&amp;gt;x_0=x_1-x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
Тогда для любого &amp;lt;math&amp;gt;i=1,..,n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;&amp;amp;#8194; m_i|x_0&amp;lt;/math&amp;gt;, а следовательно и &amp;lt;math&amp;gt;M|x_0&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;M|(x_1-x_2)&amp;lt;/math&amp;gt;). Это означает, что &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; можно представить в виде: &amp;lt;math&amp;gt;x_1=x_2+kM&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; некоторое целое число. Следовательно, &amp;lt;math&amp;gt;x_1=x_2 &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;, что и требовалось доказать. Теорема доказана.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поэтапное описание алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Вычисление значения &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;&lt;br /&gt;
#Вычисление значений &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;, для всех &amp;lt;math&amp;gt;i=1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt;&lt;br /&gt;
#Нахождение обратных элементов к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по соответствующему модулю при помощи алгоритма Евклида. Описание расширенного алгоритма Евклида:&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; b) &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=a &amp;amp;#8194; t_1=b &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=t_1q_1+t_2&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_1=t_2q_2+t_3&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;...&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-2}=t_{k-1}q_{k-1}+t_{k} &amp;amp;#8194; t_{k}=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-1}=t_{k}q_{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_0=1 &amp;amp;#8194; p_1=q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_j=q_jp_{j-1}+p_{j-2} &amp;amp;#8194; j=2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}=(-1)^{k+1}p_{k-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Формирование итогового ответа.&lt;br /&gt;
#:&amp;lt;math&amp;gt; x=a_1 M_1 N_1+...+a_n M_n N_n &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро алгоритма составляет определение для каждого числа &amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt; , &amp;lt;math&amp;gt;i=1,..., n&amp;lt;/math&amp;gt;, обратного к нему числа по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; при помощи расширенного алгоритма Евклида.  &lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В алгоритм последовательно входят следующие макроструктуры: &lt;br /&gt;
#Вычисление &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; как произведение всех &amp;lt;math&amp;gt;m_j&amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt;j&amp;amp;#8800;i,&amp;amp;#8194;j =1, ...,n &amp;lt;/math&amp;gt;;&lt;br /&gt;
#Вычисление обратного числа к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по расширенному алгоритму Евклида; &lt;br /&gt;
#Суммирование произведений вида &amp;lt;math&amp;gt;a_i M_i N_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;, по модулю &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Общая схема реализации программы:&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M=M*m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_i=M/m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_{i}^{-1}=РасширенныйАлгоритмЕвклида(M_i,m_i);&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;x=x+a_i*M_i*M_{i}^{-1};&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x=x&amp;amp;#8194; mod &amp;amp;#8194; M;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Предлагаемая реализация Расширенного Алгоритма Евклида (С/С++):&lt;br /&gt;
:int inverse(int a, int m) {//a&amp;lt;m&lt;br /&gt;
::int c,cur=0, q,p0=0,p1=1,p2,m0=m;&lt;br /&gt;
::while (a) {&lt;br /&gt;
:::cur++;&lt;br /&gt;
:::c = m % a;&lt;br /&gt;
:::q = (m-c)/a;&lt;br /&gt;
:::p2 = q*p1+p0;&lt;br /&gt;
:::p0 = p1;&lt;br /&gt;
:::p1 = p2;&lt;br /&gt;
:::m = a;&lt;br /&gt;
:::a = c;&lt;br /&gt;
::}&lt;br /&gt;
::if (m==1) {&lt;br /&gt;
:::if (cur%2) &lt;br /&gt;
::::return p0;  &lt;br /&gt;
:::return m0-p0;&lt;br /&gt;
:::}&lt;br /&gt;
::return -1;&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Последовательная сложность алгоритма составляет &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; равен максимальному значению &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;. Основная сложность приходится на расчет обратного элемента к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; по расширенному Алгоритму Евклида, т.к при работе алгоритма Евклида (не расширенного) совершается максимальное число шагов &amp;lt;math&amp;gt;log(max\{a,b\})&amp;lt;/math&amp;gt;, когда подаются на вход числа &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; взаимно простые (по условию данной задачи рассматриваются только такие числа), и число шагов в расширенном алгоритме совпадает, то исходя из предложенной реализации расширенного Алгоритма Евклида сложность его работы составит &amp;lt;math&amp;gt;3logk&amp;lt;/math&amp;gt;. Всего данный алгоритм будет отрабатывать &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; раз, следовательно сложность Алгоритм решения линейной системы сравнений составит &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Описание графа алгоримта. В графе алгоритма в яросно-параллельной форме выделяется 3 яруса (см. рис.1). &#039;&#039;&#039;Первый ярус&#039;&#039;&#039;: расчет &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;. &#039;&#039;&#039;Второй ярус&#039;&#039;&#039;: умножение вида &amp;lt;math&amp;gt;M_ia_i&amp;lt;/math&amp;gt;. &#039;&#039;&#039;Третий ярус&#039;&#039;&#039;: растчет &amp;lt;math&amp;gt;M_{i}^{-1}&amp;lt;/math&amp;gt; по расширенному Алгоритму Евклида, и формирование  итогового ответа как сумму &amp;lt;math&amp;gt;M_ia_iM_{i}^{-1}&amp;lt;/math&amp;gt;. Во всех ярусах &amp;lt;math&amp;gt;i=1, ..., n&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Файл:1.png|400px|thumb|center|рис.1 Информационный граф. Оранжевый- операция 1 (п. 1.2); желтый -операции 2 (п. 1.2); зеленый- операция умножения на ai ;синий-операции 3 (п. 1.2), голубой -операция 4 (п. 1.2).]]&lt;br /&gt;
&lt;br /&gt;
Входные данные  &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; подаются на первый ярус, &amp;lt;math&amp;gt;a_i&amp;lt;/math&amp;gt; -на второй (см. рис.2).    &lt;br /&gt;
&lt;br /&gt;
[[Файл:2.png|400px|thumb|center|рис.2 Информационный граф с изображением входных данных.] Оранжевый- операция 1 (п. 1.2); желтый -операции 2 (п. 1.2); зеленый- операция умножения на ai ;синий-операции 3 (п. 1.2), голубой -операция 4 (п. 1.2).]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Для реализации алгоритма решения линейной системы сравнений потребуется выполнить последовательно следующие ярусы:&lt;br /&gt;
*1 раз первый ярус&lt;br /&gt;
*1 раз второй ярус&lt;br /&gt;
*&amp;lt;math&amp;gt;3*log(k)+1&amp;lt;/math&amp;gt; раз третий ярус,  где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; равен максимальному значению &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;. &lt;br /&gt;
Таким образом параллельная сложность алгоритма составит &amp;lt;math&amp;gt;3logk+2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; пар числе &amp;lt;math&amp;gt;(a_i, m_i)&amp;lt;/math&amp;gt;, соответствующая линейному сравнению вида  &amp;lt;math&amp;gt; x &amp;amp;equiv; a_i &amp;amp;#8194;(mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;   , где &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; a_i&amp;lt;/math&amp;gt; -некоторые целые числа, &amp;lt;math&amp;gt;i=1, ..., n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;2n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; число &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; - решение линейной системы сравнений.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
#Применко Э.А. Алгебраические основы криптографии: Учебное пособие. M.:Книжный Дом &amp;quot;ЛИБРОКОМ&amp;quot;,2013.-288с.&lt;br /&gt;
#Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И. Защита информации: учебное пособие — М.: МФТИ, 2011. — 225 с. — ISBN 978-5-7417-0377-9&lt;br /&gt;
#Переславцева О. Н. Распараллеливание алгоритмов с применением китайской теоремы об остатках. — Вестник ТГУ, 2009. — № 4. — ISSN 1810-0198.&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24757</id>
		<title>Участник:Кинжикеева Дина/ Алгоритм решения линейной системы сравнений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24757"/>
		<updated>2017-11-30T22:12:54Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:Алгоритм: Алгоритм решения линейной системы сравнений.&lt;br /&gt;
:Исполнитель: Кинжикеева Дина.&lt;br /&gt;
&lt;br /&gt;
==  Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
Введем некоторые определения.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 1&#039;&#039;&#039; Пусть &#039;&#039;m&#039;&#039; целое число большее единицы (&#039;&#039;m&#039;&#039;&amp;gt;1). Говорят, что &#039;&#039;a&#039;&#039; &#039;&#039;сравнимо&#039;&#039; с &#039;&#039;b&#039;&#039; по &#039;&#039;модулю&#039;&#039; &#039;&#039;m&#039;&#039;, если &#039;&#039;m&#039;&#039; делит (&#039;&#039;a&#039;&#039;-&#039;&#039;b&#039;&#039;) (обозначение: &#039;&#039;m|(a-b)&#039;&#039;), а именно выполняется равенство: &#039;&#039;a = b+tm&#039;&#039;, где &#039;&#039;t&#039;&#039; некоторое целое число. Сравнение записывает таким образом: &amp;lt;math&amp;gt; a &amp;amp;equiv; b &amp;amp;#8194; (mod	&amp;amp;#8194; m) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 2&#039;&#039;&#039; Число НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) называется &#039;&#039;наибольшим общим делителем&#039;&#039; двух чисел &#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039; если:&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) делит оба числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;;&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) является наибольшим общим делителем чисел &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;, то если &#039;&#039;d|a&#039;&#039; и &#039;&#039;d|b&#039;&#039;, то &#039;&#039;d|&#039;&#039;НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) (или, что то же самое, &#039;&#039;d&#039;&#039; меньше либо равно НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 3&#039;&#039;&#039; Числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039; называются &#039;&#039;взаимно простыми&#039;&#039;, если НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)=1.&lt;br /&gt;
   &lt;br /&gt;
Задана линейная система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;&amp;amp;#8194; m_1,m_2,...,m_n &amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; &amp;amp;#8194; a_1, a_2,..., a_n&amp;lt;/math&amp;gt; -некоторые целые числа.&lt;br /&gt;
Рассматривается задача решения линейной системы сравнений вида, описанного выше. Данная система сравнений имеет единственное решение по модулю &amp;lt;math&amp;gt;M=m_1m_2...m_n &amp;lt;/math&amp;gt; по китайской теореме об остатках. Эта теорема утверждает, что можно восстановить целое число по множеству его остатков от деления числа из некоторого набора попарно взаимно простых чисел. Теорема в её арифметической формулировке была описана в трактате китайского математика Сунь Цзы, предположительно датируемом третьим веком н. э. и затем была обобщена Цинь Цзюшао в его книге «Математические рассуждения в 9 главах» датируемой 1247 годом, где было приведено точное решение. Утверждение этой теоремы можно рассматривать как алгоритм решения линейной системы сравнений требуемого вида. &lt;br /&gt;
Искомое решение ищется как сумма вида:&lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Алгоритм строится на утверждении китайской теоремы об остатках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&amp;lt;/u&amp;gt; &#039;&#039;(Китайская теорема об остатках)&#039;&#039;&lt;br /&gt;
:Пусть &amp;lt;math&amp;gt;m_1,m_2,...,m_n&amp;lt;/math&amp;gt; натуральные числа такие, что НОД(&amp;lt;math&amp;gt;m_i,m_j&amp;lt;/math&amp;gt;)=1, при &amp;lt;math&amp;gt;i≠j&amp;lt;/math&amp;gt; для любых &amp;lt;math&amp;gt;i,j=1,2,..,n&amp;lt;/math&amp;gt;. И пусть &amp;lt;math&amp;gt;a_1,a_2,...,a_n&amp;lt;/math&amp;gt; целые числа. Тогда система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:имеет единственное решение по модулю числа &amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;(1), &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;u&amp;gt;Доказательство.&amp;lt;/u&amp;gt; Докажем существование решения, а именно, что решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; удовлетворяет заданной системе сравнений. Рассмотрим &amp;lt;math&amp;gt;x &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Все слагаемые в сумме (1), кроме первого, делятся на &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt;, а первое слагаемое &amp;lt;math&amp;gt;a_1M_1N_1  &amp;amp;equiv; a_1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;M_1N_1&amp;amp;equiv;1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Таким образом, &amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;. Аналогичным образом для &amp;lt;math&amp;gt;m_2,..,m_n&amp;lt;/math&amp;gt;. Следовательно, &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; -решение.  &lt;br /&gt;
Покажем единственность решения. Пусть существуют два различных решения системы &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;. &lt;br /&gt;
:&amp;lt;math&amp;gt;x_0=x_1-x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
Тогда для любого &amp;lt;math&amp;gt;i=1,..,n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;&amp;amp;#8194; m_i|x_0&amp;lt;/math&amp;gt;, а следовательно и &amp;lt;math&amp;gt;M|x_0&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;M|(x_1-x_2)&amp;lt;/math&amp;gt;). Это означает, что &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; можно представить в виде: &amp;lt;math&amp;gt;x_1=x_2+kM&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; некоторое целое число. Следовательно, &amp;lt;math&amp;gt;x_1=x_2 &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;, что и требовалось доказать. Теорема доказана.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поэтапное описание алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Вычисление значения &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;&lt;br /&gt;
#Вычисление значений &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;, для всех &amp;lt;math&amp;gt;i=1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt;&lt;br /&gt;
#Нахождение обратных элементов к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по соответствующему модулю при помощи алгоритма Евклида. Описание расширенного алгоритма Евклида:&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; b) &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=a &amp;amp;#8194; t_1=b &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=t_1q_1+t_2&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_1=t_2q_2+t_3&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;...&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-2}=t_{k-1}q_{k-1}+t_{k} &amp;amp;#8194; t_{k}=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-1}=t_{k}q_{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_0=1 &amp;amp;#8194; p_1=q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_j=q_jp_{j-1}+p_{j-2} &amp;amp;#8194; j=2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}=(-1)^{k+1}p_{k-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Формирование итогового ответа.&lt;br /&gt;
#:&amp;lt;math&amp;gt; x=a_1 M_1 N_1+...+a_n M_n N_n &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро алгоритма составляет определение для каждого числа &amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt; , &amp;lt;math&amp;gt;i=1,..., n&amp;lt;/math&amp;gt;, обратного к нему числа по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; при помощи расширенного алгоритма Евклида.  &lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В алгоритм последовательно входят следующие макроструктуры: &lt;br /&gt;
#Вычисление &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; как произведение всех &amp;lt;math&amp;gt;m_j&amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt;j&amp;amp;#8800;i,&amp;amp;#8194;j =1, ...,n &amp;lt;/math&amp;gt;;&lt;br /&gt;
#Вычисление обратного числа к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по расширенному алгоритму Евклида; &lt;br /&gt;
#Суммирование произведений вида &amp;lt;math&amp;gt;a_i M_i N_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;, по модулю &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Общая схема реализации программы:&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M=M*m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_i=M/m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_{i}^{-1}=РасширенныйАлгоритмЕвклида(M_i,m_i);&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;x=x+a_i*M_i*M_{i}^{-1};&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x=x&amp;amp;#8194; mod &amp;amp;#8194; M;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Предлагаемая реализация Расширенного Алгоритма Евклида (С/С++):&lt;br /&gt;
:int inverse(int a, int m) {//a&amp;lt;m&lt;br /&gt;
::int c,cur=0, q,p0=0,p1=1,p2,m0=m;&lt;br /&gt;
::while (a) {&lt;br /&gt;
:::cur++;&lt;br /&gt;
:::c = m % a;&lt;br /&gt;
:::q = (m-c)/a;&lt;br /&gt;
:::p2 = q*p1+p0;&lt;br /&gt;
:::p0 = p1;&lt;br /&gt;
:::p1 = p2;&lt;br /&gt;
:::m = a;&lt;br /&gt;
:::a = c;&lt;br /&gt;
::}&lt;br /&gt;
::if (m==1) {&lt;br /&gt;
:::if (cur%2) &lt;br /&gt;
::::return p0;  &lt;br /&gt;
:::return m0-p0;&lt;br /&gt;
:::}&lt;br /&gt;
::return -1;&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Последовательная сложность алгоритма составляет &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; равен максимальному значению &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;. Основная сложность приходится на расчет обратного элемента к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; по расширенному Алгоритму Евклида, т.к при работе алгоритма Евклида (не расширенного) совершается максимальное число шагов &amp;lt;math&amp;gt;log(max\{a,b\})&amp;lt;/math&amp;gt;, когда подаются на вход числа &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; взаимно простые (по условию данной задачи рассматриваются только такие числа), и число шагов в расширенном алгоритме совпадает, то исходя из предложенной реализации расширенного Алгоритма Евклида сложность его работы составит &amp;lt;math&amp;gt;3logk&amp;lt;/math&amp;gt;. Всего данный алгоритм будет отрабатывать &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; раз, следовательно сложность Алгоритм решения линейной системы сравнений составит &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Описание графа алгоримта. В графе алгоритма в яросно-параллельной форме выделяется 3 яруса. &#039;&#039;&#039;Первый ярус&#039;&#039;&#039;: расчет   &lt;br /&gt;
&lt;br /&gt;
[[Файл:1.png|400px|thumb|center|рис.1 Информационный граф. Оранжевый- операция 1 (п. 1.2); желтый -операции 2 (п. 1.2); зеленый- операция умножения на ai ;синий-операции 3 (п. 1.2), голубой -операция 4 (п. 1.2).]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2.png|400px|thumb|center|рис.2 Информационный граф с изображением входных данных.] Оранжевый- операция 1 (п. 1.2); желтый -операции 2 (п. 1.2); зеленый- операция умножения на ai ;синий-операции 3 (п. 1.2), голубой -операция 4 (п. 1.2).]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; пар числе &amp;lt;math&amp;gt;(a_i, m_i)&amp;lt;/math&amp;gt;, соответствующая линейному сравнению вида  &amp;lt;math&amp;gt; x &amp;amp;equiv; a_i &amp;amp;#8194;(mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;   , где &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; a_i&amp;lt;/math&amp;gt; -некоторые целые числа, &amp;lt;math&amp;gt;i=1, ..., n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;2n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; число &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; - решение линейной системы сравнений.&lt;br /&gt;
&#039;&#039;&#039;Объем выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
#Применко Э.А. Алгебраические основы криптографии: Учебное пособие. M.:Книжный Дом &amp;quot;ЛИБРОКОМ&amp;quot;,2013.-288с.&lt;br /&gt;
#Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И. Защита информации: учебное пособие — М.: МФТИ, 2011. — 225 с. — ISBN 978-5-7417-0377-9&lt;br /&gt;
#Переславцева О. Н. Распараллеливание алгоритмов с применением китайской теоремы об остатках. — Вестник ТГУ, 2009. — № 4. — ISSN 1810-0198.&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24733</id>
		<title>Участник:Кинжикеева Дина/ Алгоритм решения линейной системы сравнений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24733"/>
		<updated>2017-11-30T20:40:44Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:Алгоритм: Алгоритм решения линейной системы сравнений.&lt;br /&gt;
:Исполнитель: Кинжикеева Дина.&lt;br /&gt;
&lt;br /&gt;
==  Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
Введем некоторые определения.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 1&#039;&#039;&#039; Пусть &#039;&#039;m&#039;&#039; целое число большее единицы (&#039;&#039;m&#039;&#039;&amp;gt;1). Говорят, что &#039;&#039;a&#039;&#039; &#039;&#039;сравнимо&#039;&#039; с &#039;&#039;b&#039;&#039; по &#039;&#039;модулю&#039;&#039; &#039;&#039;m&#039;&#039;, если &#039;&#039;m&#039;&#039; делит (&#039;&#039;a&#039;&#039;-&#039;&#039;b&#039;&#039;) (обозначение: &#039;&#039;m|(a-b)&#039;&#039;), а именно выполняется равенство: &#039;&#039;a = b+tm&#039;&#039;, где &#039;&#039;t&#039;&#039; некоторое целое число. Сравнение записывает таким образом: &amp;lt;math&amp;gt; a &amp;amp;equiv; b &amp;amp;#8194; (mod	&amp;amp;#8194; m) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 2&#039;&#039;&#039; Число НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) называется &#039;&#039;наибольшим общим делителем&#039;&#039; двух чисел &#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039; если:&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) делит оба числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;;&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) является наибольшим общим делителем чисел &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;, то если &#039;&#039;d|a&#039;&#039; и &#039;&#039;d|b&#039;&#039;, то &#039;&#039;d|&#039;&#039;НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) (или, что то же самое, &#039;&#039;d&#039;&#039; меньше либо равно НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 3&#039;&#039;&#039; Числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039; называются &#039;&#039;взаимно простыми&#039;&#039;, если НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)=1.&lt;br /&gt;
   &lt;br /&gt;
Задана линейная система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;&amp;amp;#8194; m_1,m_2,...,m_n &amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; &amp;amp;#8194; a_1, a_2,..., a_n&amp;lt;/math&amp;gt; -некоторые целые числа.&lt;br /&gt;
Рассматривается задача решения линейной системы сравнений вида, описанного выше. Данная система сравнений имеет единственное решение по модулю &amp;lt;math&amp;gt;M=m_1m_2...m_n &amp;lt;/math&amp;gt; по китайской теореме об остатках. Эта теорема утверждает, что можно восстановить целое число по множеству его остатков от деления числа из некоторого набора попарно взаимно простых чисел. Теорема в её арифметической формулировке была описана в трактате китайского математика Сунь Цзы, предположительно датируемом третьим веком н. э. и затем была обобщена Цинь Цзюшао в его книге «Математические рассуждения в 9 главах» датируемой 1247 годом, где было приведено точное решение. Утверждение этой теоремы можно рассматривать как алгоритм решения линейной системы сравнений требуемого вида. &lt;br /&gt;
Искомое решение ищется как сумма вида:&lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Алгоритм строится на утверждении китайской теоремы об остатках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&amp;lt;/u&amp;gt; &#039;&#039;(Китайская теорема об остатках)&#039;&#039;&lt;br /&gt;
:Пусть &amp;lt;math&amp;gt;m_1,m_2,...,m_n&amp;lt;/math&amp;gt; натуральные числа такие, что НОД(&amp;lt;math&amp;gt;m_i,m_j&amp;lt;/math&amp;gt;)=1, при &amp;lt;math&amp;gt;i≠j&amp;lt;/math&amp;gt; для любых &amp;lt;math&amp;gt;i,j=1,2,..,n&amp;lt;/math&amp;gt;. И пусть &amp;lt;math&amp;gt;a_1,a_2,...,a_n&amp;lt;/math&amp;gt; целые числа. Тогда система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:имеет единственное решение по модулю числа &amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;(1), &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;u&amp;gt;Доказательство.&amp;lt;/u&amp;gt; Докажем существование решения, а именно, что решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; удовлетворяет заданной системе сравнений. Рассмотрим &amp;lt;math&amp;gt;x &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Все слагаемые в сумме (1), кроме первого, делятся на &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt;, а первое слагаемое &amp;lt;math&amp;gt;a_1M_1N_1  &amp;amp;equiv; a_1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;M_1N_1&amp;amp;equiv;1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Таким образом, &amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;. Аналогичным образом для &amp;lt;math&amp;gt;m_2,..,m_n&amp;lt;/math&amp;gt;. Следовательно, &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; -решение.  &lt;br /&gt;
Покажем единственность решения. Пусть существуют два различных решения системы &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;. &lt;br /&gt;
:&amp;lt;math&amp;gt;x_0=x_1-x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
Тогда для любого &amp;lt;math&amp;gt;i=1,..,n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;&amp;amp;#8194; m_i|x_0&amp;lt;/math&amp;gt;, а следовательно и &amp;lt;math&amp;gt;M|x_0&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;M|(x_1-x_2)&amp;lt;/math&amp;gt;). Это означает, что &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; можно представить в виде: &amp;lt;math&amp;gt;x_1=x_2+kM&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; некоторое целое число. Следовательно, &amp;lt;math&amp;gt;x_1=x_2 &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;, что и требовалось доказать. Теорема доказана.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поэтапное описание алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Вычисление значения &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;&lt;br /&gt;
#Вычисление значений &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;, для всех &amp;lt;math&amp;gt;i=1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt;&lt;br /&gt;
#Нахождение обратных элементов к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по соответствующему модулю при помощи алгоритма Евклида. Описание расширенного алгоритма Евклида:&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; b) &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=a &amp;amp;#8194; t_1=b &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=t_1q_1+t_2&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_1=t_2q_2+t_3&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;...&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-2}=t_{k-1}q_{k-1}+t_{k} &amp;amp;#8194; t_{k}=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-1}=t_{k}q_{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_0=1 &amp;amp;#8194; p_1=q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_j=q_jp_{j-1}+p_{j-2} &amp;amp;#8194; j=2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}=(-1)^{k+1}p_{k-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Формирование итогового ответа.&lt;br /&gt;
#:&amp;lt;math&amp;gt; x=a_1 M_1 N_1+...+a_n M_n N_n &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро алгоритма составляет определение для каждого числа &amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt; , &amp;lt;math&amp;gt;i=1,..., n&amp;lt;/math&amp;gt;, обратного к нему числа по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; при помощи расширенного алгоритма Евклида.  &lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В алгоритм последовательно входят следующие макроструктуры: &lt;br /&gt;
#Вычисление &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; как произведение всех &amp;lt;math&amp;gt;m_j&amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt;j&amp;amp;#8800;i,&amp;amp;#8194;j =1, ...,n &amp;lt;/math&amp;gt;;&lt;br /&gt;
#Вычисление обратного числа к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по расширенному алгоритму Евклида; &lt;br /&gt;
#Суммирование произведений вида &amp;lt;math&amp;gt;a_i M_i N_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;, по модулю &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Общая схема реализации программы:&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M=M*m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_i=M/m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_{i}^{-1}=РасширенныйАлгоритмЕвклида(M_i,m_i);&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;x=x+a_i*M_i*M_{i}^{-1};&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x=x&amp;amp;#8194; mod &amp;amp;#8194; M;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Предлагаемая реализация Расширенного Алгоритма Евклида (С/С++):&lt;br /&gt;
:int inverse(int a, int m) {//a&amp;lt;m&lt;br /&gt;
::int c,cur=0, q,p0=0,p1=1,p2,m0=m;&lt;br /&gt;
::while (a) {&lt;br /&gt;
:::cur++;&lt;br /&gt;
:::c = m % a;&lt;br /&gt;
:::q = (m-c)/a;&lt;br /&gt;
:::p2 = q*p1+p0;&lt;br /&gt;
:::p0 = p1;&lt;br /&gt;
:::p1 = p2;&lt;br /&gt;
:::m = a;&lt;br /&gt;
:::a = c;&lt;br /&gt;
::}&lt;br /&gt;
::if (m==1) {&lt;br /&gt;
:::if (cur%2) &lt;br /&gt;
::::return p0;  &lt;br /&gt;
:::return m0-p0;&lt;br /&gt;
:::}&lt;br /&gt;
::return -1;&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Последовательная сложность алгоритма составляет &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; равен максимальному значению &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;. Основная сложность приходится на расчет обратного элемента к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; по расширенному Алгоритму Евклида, т.к при работе алгоритма Евклида (не расширенного) совершается максимальное число шагов &amp;lt;math&amp;gt;log(max\{a,b\})&amp;lt;/math&amp;gt;, когда подаются на вход числа &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; взаимно простые (по условию данной задачи рассматриваются только такие числа), и число шагов в расширенном алгоритме совпадает, то исходя из предложенной реализации расширенного Алгоритма Евклида сложность его работы составит &amp;lt;math&amp;gt;3logk&amp;lt;/math&amp;gt;. Всего данный алгоритм будет отрабатывать &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; раз, следовательно сложность Алгоритм решения линейной системы сравнений составит &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Опишем граф программы по &lt;br /&gt;
&lt;br /&gt;
[[Файл:1.png|400px|thumb|center|рис.1 Информационный граф. Оранжевый- операция 1 (п. 1.2); желтый -операции 2 (п. 1.2); зеленый- операция умножения на ai ;синий-операции 3 (п. 1.2), голубой -операция 4 (п. 1.2).]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2.png|400px|thumb|center|рис.2 Информационный граф с изображением входных данных.] Оранжевый- операция 1 (п. 1.2); желтый -операции 2 (п. 1.2); зеленый- операция умножения на ai ;синий-операции 3 (п. 1.2), голубой -операция 4 (п. 1.2).]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; пар числе &amp;lt;math&amp;gt;(a_i, m_i)&amp;lt;/math&amp;gt;, соответствующая линейному сравнению вида  &amp;lt;math&amp;gt; x &amp;amp;equiv; a_i &amp;amp;#8194;(mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;   , где &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; a_i&amp;lt;/math&amp;gt; -некоторые целые числа, &amp;lt;math&amp;gt;i=1, ..., n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;2n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; число &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; - решение линейной системы сравнений.&lt;br /&gt;
&#039;&#039;&#039;Объем выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
#Применко Э.А. Алгебраические основы криптографии: Учебное пособие. M.:Книжный Дом &amp;quot;ЛИБРОКОМ&amp;quot;,2013.-288с.&lt;br /&gt;
#Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И. Защита информации: учебное пособие — М.: МФТИ, 2011. — 225 с. — ISBN 978-5-7417-0377-9&lt;br /&gt;
#Переславцева О. Н. Распараллеливание алгоритмов с применением китайской теоремы об остатках. — Вестник ТГУ, 2009. — № 4. — ISSN 1810-0198.&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1.png&amp;diff=24729</id>
		<title>Файл:1.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1.png&amp;diff=24729"/>
		<updated>2017-11-30T20:32:59Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: Кинжикеева Дина загрузил новую версию Файл:1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:2.png&amp;diff=24728</id>
		<title>Файл:2.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:2.png&amp;diff=24728"/>
		<updated>2017-11-30T20:32:38Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: Кинжикеева Дина загрузил новую версию Файл:2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:2.png&amp;diff=24701</id>
		<title>Файл:2.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:2.png&amp;diff=24701"/>
		<updated>2017-11-30T19:41:27Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24697</id>
		<title>Участник:Кинжикеева Дина/ Алгоритм решения линейной системы сравнений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24697"/>
		<updated>2017-11-30T18:54:27Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:Алгоритм: Алгоритм решения линейной системы сравнений.&lt;br /&gt;
:Исполнитель: Кинжикеева Дина.&lt;br /&gt;
&lt;br /&gt;
==  Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
Введем некоторые определения.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 1&#039;&#039;&#039; Пусть &#039;&#039;m&#039;&#039; целое число большее единицы (&#039;&#039;m&#039;&#039;&amp;gt;1). Говорят, что &#039;&#039;a&#039;&#039; &#039;&#039;сравнимо&#039;&#039; с &#039;&#039;b&#039;&#039; по &#039;&#039;модулю&#039;&#039; &#039;&#039;m&#039;&#039;, если &#039;&#039;m&#039;&#039; делит (&#039;&#039;a&#039;&#039;-&#039;&#039;b&#039;&#039;) (обозначение: &#039;&#039;m|(a-b)&#039;&#039;), а именно выполняется равенство: &#039;&#039;a = b+tm&#039;&#039;, где &#039;&#039;t&#039;&#039; некоторое целое число. Сравнение записывает таким образом: &amp;lt;math&amp;gt; a &amp;amp;equiv; b &amp;amp;#8194; (mod	&amp;amp;#8194; m) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 2&#039;&#039;&#039; Число НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) называется &#039;&#039;наибольшим общим делителем&#039;&#039; двух чисел &#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039; если:&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) делит оба числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;;&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) является наибольшим общим делителем чисел &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;, то если &#039;&#039;d|a&#039;&#039; и &#039;&#039;d|b&#039;&#039;, то &#039;&#039;d|&#039;&#039;НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) (или, что то же самое, &#039;&#039;d&#039;&#039; меньше либо равно НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 3&#039;&#039;&#039; Числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039; называются &#039;&#039;взаимно простыми&#039;&#039;, если НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)=1.&lt;br /&gt;
   &lt;br /&gt;
Задана линейная система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;&amp;amp;#8194; m_1,m_2,...,m_n &amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; &amp;amp;#8194; a_1, a_2,..., a_n&amp;lt;/math&amp;gt; -некоторые целые числа.&lt;br /&gt;
Рассматривается задача решения линейной системы сравнений вида, описанного выше. Данная система сравнений имеет единственное решение по модулю &amp;lt;math&amp;gt;M=m_1m_2...m_n &amp;lt;/math&amp;gt; по китайской теореме об остатках. Эта теорема утверждает, что можно восстановить целое число по множеству его остатков от деления числа из некоторого набора попарно взаимно простых чисел. Теорема в её арифметической формулировке была описана в трактате китайского математика Сунь Цзы, предположительно датируемом третьим веком н. э. и затем была обобщена Цинь Цзюшао в его книге «Математические рассуждения в 9 главах» датируемой 1247 годом, где было приведено точное решение. Утверждение этой теоремы можно рассматривать как алгоритм решения линейной системы сравнений требуемого вида. &lt;br /&gt;
Искомое решение ищется как сумма вида:&lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Алгоритм строится на утверждении китайской теоремы об остатках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&amp;lt;/u&amp;gt; &#039;&#039;(Китайская теорема об остатках)&#039;&#039;&lt;br /&gt;
:Пусть &amp;lt;math&amp;gt;m_1,m_2,...,m_n&amp;lt;/math&amp;gt; натуральные числа такие, что НОД(&amp;lt;math&amp;gt;m_i,m_j&amp;lt;/math&amp;gt;)=1, при &amp;lt;math&amp;gt;i≠j&amp;lt;/math&amp;gt; для любых &amp;lt;math&amp;gt;i,j=1,2,..,n&amp;lt;/math&amp;gt;. И пусть &amp;lt;math&amp;gt;a_1,a_2,...,a_n&amp;lt;/math&amp;gt; целые числа. Тогда система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:имеет единственное решение по модулю числа &amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;(1), &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;u&amp;gt;Доказательство.&amp;lt;/u&amp;gt; Докажем существование решения, а именно, что решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; удовлетворяет заданной системе сравнений. Рассмотрим &amp;lt;math&amp;gt;x &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Все слагаемые в сумме (1), кроме первого, делятся на &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt;, а первое слагаемое &amp;lt;math&amp;gt;a_1M_1N_1  &amp;amp;equiv; a_1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;M_1N_1&amp;amp;equiv;1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Таким образом, &amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;. Аналогичным образом для &amp;lt;math&amp;gt;m_2,..,m_n&amp;lt;/math&amp;gt;. Следовательно, &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; -решение.  &lt;br /&gt;
Покажем единственность решения. Пусть существуют два различных решения системы &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;. &lt;br /&gt;
:&amp;lt;math&amp;gt;x_0=x_1-x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
Тогда для любого &amp;lt;math&amp;gt;i=1,..,n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;&amp;amp;#8194; m_i|x_0&amp;lt;/math&amp;gt;, а следовательно и &amp;lt;math&amp;gt;M|x_0&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;M|(x_1-x_2)&amp;lt;/math&amp;gt;). Это означает, что &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; можно представить в виде: &amp;lt;math&amp;gt;x_1=x_2+kM&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; некоторое целое число. Следовательно, &amp;lt;math&amp;gt;x_1=x_2 &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;, что и требовалось доказать. Теорема доказана.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поэтапное описание алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Вычисление значения &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;&lt;br /&gt;
#Вычисление значений &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;, для всех &amp;lt;math&amp;gt;i=1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt;&lt;br /&gt;
#Нахождение обратных элементов к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по соответствующему модулю при помощи алгоритма Евклида. Описание расширенного алгоритма Евклида:&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; b) &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=a &amp;amp;#8194; t_1=b &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=t_1q_1+t_2&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_1=t_2q_2+t_3&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;...&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-2}=t_{k-1}q_{k-1}+t_{k} &amp;amp;#8194; t_{k}=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-1}=t_{k}q_{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_0=1 &amp;amp;#8194; p_1=q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_j=q_jp_{j-1}+p_{j-2} &amp;amp;#8194; j=2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}=(-1)^{k+1}p_{k-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Формирование итогового ответа.&lt;br /&gt;
#:&amp;lt;math&amp;gt; x=a_1 M_1 N_1+...+a_n M_n N_n &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро алгоритма составляет определение для каждого числа &amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt; , &amp;lt;math&amp;gt;i=1,..., n&amp;lt;/math&amp;gt;, обратного к нему числа по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; при помощи расширенного алгоритма Евклида.  &lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В алгоритм последовательно входят следующие макроструктуры: &lt;br /&gt;
#Вычисление &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; как произведение всех &amp;lt;math&amp;gt;m_j&amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt;j&amp;amp;#8800;i,&amp;amp;#8194;j =1, ...,n &amp;lt;/math&amp;gt;;&lt;br /&gt;
#Вычисление обратного числа к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по расширенному алгоритму Евклида; &lt;br /&gt;
#Суммирование произведений вида &amp;lt;math&amp;gt;a_i M_i N_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;, по модулю &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Общая схема реализации программы:&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M=M*m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_i=M/m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_{i}^{-1}=РасширенныйАлгоритмЕвклида(M_i,m_i);&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;x=x+a_i*M_i*M_{i}^{-1};&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x=x&amp;amp;#8194; mod &amp;amp;#8194; M;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Предлагаемая реализация Расширенного Алгоритма Евклида (С/С++):&lt;br /&gt;
:int inverse(int a, int m) {//a&amp;lt;m&lt;br /&gt;
::int c,cur=0, q,p0=0,p1=1,p2,m0=m;&lt;br /&gt;
::while (a) {&lt;br /&gt;
:::cur++;&lt;br /&gt;
:::c = m % a;&lt;br /&gt;
:::q = (m-c)/a;&lt;br /&gt;
:::p2 = q*p1+p0;&lt;br /&gt;
:::p0 = p1;&lt;br /&gt;
:::p1 = p2;&lt;br /&gt;
:::m = a;&lt;br /&gt;
:::a = c;&lt;br /&gt;
::}&lt;br /&gt;
::if (m==1) {&lt;br /&gt;
:::if (cur%2) &lt;br /&gt;
::::return p0;  &lt;br /&gt;
:::return m0-p0;&lt;br /&gt;
:::}&lt;br /&gt;
::return -1;&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Последовательная сложность алгоритма составляет &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; равен максимальному значению &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;. Основная сложность приходится на расчет обратного элемента к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; по расширенному Алгоритму Евклида, т.к при работе алгоритма Евклида (не расширенного) совершается максимальное число шагов &amp;lt;math&amp;gt;log(max\{a,b\})&amp;lt;/math&amp;gt;, когда подаются на вход числа &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; взаимно простые (по условию данной задачи рассматриваются только такие числа), и число шагов в расширенном алгоритме совпадает, то исходя из предложенной реализации расширенного Алгоритма Евклида сложность его работы составит &amp;lt;math&amp;gt;3logk&amp;lt;/math&amp;gt;. Всего данный алгоритм будет отрабатывать &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; раз, следовательно сложность Алгоритм решения линейной системы сравнений составит &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1.png|400px|thumb|center|рис.1 Информационный граф.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; пар числе &amp;lt;math&amp;gt;(a_i, m_i)&amp;lt;/math&amp;gt;, соответствующая линейному сравнению вида  &amp;lt;math&amp;gt; x &amp;amp;equiv; a_i &amp;amp;#8194;(mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;   , где &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; a_i&amp;lt;/math&amp;gt; -некоторые целые числа, &amp;lt;math&amp;gt;i=1, ..., n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;2n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; число &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; - решение линейной системы сравнений.&lt;br /&gt;
&#039;&#039;&#039;Объем выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
#Применко Э.А. Алгебраические основы криптографии: Учебное пособие. M.:Книжный Дом &amp;quot;ЛИБРОКОМ&amp;quot;,2013.-288с.&lt;br /&gt;
#Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И. Защита информации: учебное пособие — М.: МФТИ, 2011. — 225 с. — ISBN 978-5-7417-0377-9&lt;br /&gt;
#Переславцева О. Н. Распараллеливание алгоритмов с применением китайской теоремы об остатках. — Вестник ТГУ, 2009. — № 4. — ISSN 1810-0198.&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1.png&amp;diff=24694</id>
		<title>Файл:1.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1.png&amp;diff=24694"/>
		<updated>2017-11-30T18:42:36Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24683</id>
		<title>Участник:Кинжикеева Дина/ Алгоритм решения линейной системы сравнений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=24683"/>
		<updated>2017-11-30T17:48:12Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:Алгоритм: Алгоритм решения линейной системы сравнений.&lt;br /&gt;
:Исполнитель: Кинжикеева Дина.&lt;br /&gt;
&lt;br /&gt;
==  Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
Введем некоторые определения.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 1&#039;&#039;&#039; Пусть &#039;&#039;m&#039;&#039; целое число большее единицы (&#039;&#039;m&#039;&#039;&amp;gt;1). Говорят, что &#039;&#039;a&#039;&#039; &#039;&#039;сравнимо&#039;&#039; с &#039;&#039;b&#039;&#039; по &#039;&#039;модулю&#039;&#039; &#039;&#039;m&#039;&#039;, если &#039;&#039;m&#039;&#039; делит (&#039;&#039;a&#039;&#039;-&#039;&#039;b&#039;&#039;) (обозначение: &#039;&#039;m|(a-b)&#039;&#039;), а именно выполняется равенство: &#039;&#039;a = b+tm&#039;&#039;, где &#039;&#039;t&#039;&#039; некоторое целое число. Сравнение записывает таким образом: &amp;lt;math&amp;gt; a &amp;amp;equiv; b &amp;amp;#8194; (mod	&amp;amp;#8194; m) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 2&#039;&#039;&#039; Число НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) называется &#039;&#039;наибольшим общим делителем&#039;&#039; двух чисел &#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039; если:&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) делит оба числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;;&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) является наибольшим общим делителем чисел &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;, то если &#039;&#039;d|a&#039;&#039; и &#039;&#039;d|b&#039;&#039;, то &#039;&#039;d|&#039;&#039;НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) (или, что то же самое, &#039;&#039;d&#039;&#039; меньше либо равно НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 3&#039;&#039;&#039; Числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039; называются &#039;&#039;взаимно простыми&#039;&#039;, если НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)=1.&lt;br /&gt;
   &lt;br /&gt;
Задана линейная система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;&amp;amp;#8194; m_1,m_2,...,m_n &amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; &amp;amp;#8194; a_1, a_2,..., a_n&amp;lt;/math&amp;gt; -некоторые целые числа.&lt;br /&gt;
Рассматривается задача решения линейной системы сравнений вида, описанного выше. Данная система сравнений имеет единственное решение по модулю &amp;lt;math&amp;gt;M=m_1m_2...m_n &amp;lt;/math&amp;gt; по китайской теореме об остатках. Эта теорема утверждает, что можно восстановить целое число по множеству его остатков от деления числа из некоторого набора попарно взаимно простых чисел. Теорема в её арифметической формулировке была описана в трактате китайского математика Сунь Цзы, предположительно датируемом третьим веком н. э. и затем была обобщена Цинь Цзюшао в его книге «Математические рассуждения в 9 главах» датируемой 1247 годом, где было приведено точное решение. Утверждение этой теоремы можно рассматривать как алгоритм решения линейной системы сравнений требуемого вида. &lt;br /&gt;
Искомое решение ищется как сумма вида:&lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Алгоритм строится на утверждении китайской теоремы об остатках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&amp;lt;/u&amp;gt; &#039;&#039;(Китайская теорема об остатках)&#039;&#039;&lt;br /&gt;
:Пусть &amp;lt;math&amp;gt;m_1,m_2,...,m_n&amp;lt;/math&amp;gt; натуральные числа такие, что НОД(&amp;lt;math&amp;gt;m_i,m_j&amp;lt;/math&amp;gt;)=1, при &amp;lt;math&amp;gt;i≠j&amp;lt;/math&amp;gt; для любых &amp;lt;math&amp;gt;i,j=1,2,..,n&amp;lt;/math&amp;gt;. И пусть &amp;lt;math&amp;gt;a_1,a_2,...,a_n&amp;lt;/math&amp;gt; целые числа. Тогда система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:имеет единственное решение по модулю числа &amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;(1), &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;u&amp;gt;Доказательство.&amp;lt;/u&amp;gt; Докажем существование решения, а именно, что решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; удовлетворяет заданной системе сравнений. Рассмотрим &amp;lt;math&amp;gt;x &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Все слагаемые в сумме (1), кроме первого, делятся на &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt;, а первое слагаемое &amp;lt;math&amp;gt;a_1M_1N_1  &amp;amp;equiv; a_1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;M_1N_1&amp;amp;equiv;1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Таким образом, &amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;. Аналогичным образом для &amp;lt;math&amp;gt;m_2,..,m_n&amp;lt;/math&amp;gt;. Следовательно, &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; -решение.  &lt;br /&gt;
Покажем единственность решения. Пусть существуют два различных решения системы &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;. &lt;br /&gt;
:&amp;lt;math&amp;gt;x_0=x_1-x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
Тогда для любого &amp;lt;math&amp;gt;i=1,..,n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;&amp;amp;#8194; m_i|x_0&amp;lt;/math&amp;gt;, а следовательно и &amp;lt;math&amp;gt;M|x_0&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;M|(x_1-x_2)&amp;lt;/math&amp;gt;). Это означает, что &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; можно представить в виде: &amp;lt;math&amp;gt;x_1=x_2+kM&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; некоторое целое число. Следовательно, &amp;lt;math&amp;gt;x_1=x_2 &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;, что и требовалось доказать. Теорема доказана.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поэтапное описание алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Вычисление значения &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;&lt;br /&gt;
#Вычисление значений &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;, для всех &amp;lt;math&amp;gt;i=1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt;&lt;br /&gt;
#Нахождение обратных элементов к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по соответствующему модулю при помощи алгоритма Евклида. Описание расширенного алгоритма Евклида:&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; b) &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=a &amp;amp;#8194; t_1=b &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=t_1q_1+t_2&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_1=t_2q_2+t_3&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;...&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-2}=t_{k-1}q_{k-1}+t_{k} &amp;amp;#8194; t_{k}=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-1}=t_{k}q_{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_0=1 &amp;amp;#8194; p_1=q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_j=q_jp_{j-1}+p_{j-2} &amp;amp;#8194; j=2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}=(-1)^{k+1}p_{k-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Формирование итогового ответа.&lt;br /&gt;
#:&amp;lt;math&amp;gt; x=a_1 M_1 N_1+...+a_n M_n N_n &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро алгоритма составляет определение для каждого числа &amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt; , &amp;lt;math&amp;gt;i=1,..., n&amp;lt;/math&amp;gt;, обратного к нему числа по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; при помощи расширенного алгоритма Евклида.  &lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В алгоритм последовательно входят следующие макроструктуры: &lt;br /&gt;
#Вычисление &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; как произведение всех &amp;lt;math&amp;gt;m_j&amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt;j&amp;amp;#8800;i,&amp;amp;#8194;j =1, ...,n &amp;lt;/math&amp;gt;;&lt;br /&gt;
#Вычисление обратного числа к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по расширенному алгоритму Евклида; &lt;br /&gt;
#Суммирование произведений вида &amp;lt;math&amp;gt;a_i M_i N_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;, по модулю &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Общая схема реализации программы:&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M=M*m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;for &amp;amp;#8194; i:=0 &amp;amp;#8194; to &amp;amp;#8194; n &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_i=M/m_i;&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;M_{i}^{-1}=РасширенныйАлгоритмЕвклида(M_i,m_i);&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;x=x+a_i*M_i*M_{i}^{-1};&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x=x&amp;amp;#8194; mod &amp;amp;#8194; M;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Предлагаемая реализация Расширенного Алгоритма Евклида (С/С++):&lt;br /&gt;
:int inverse(int a, int m) {//a&amp;lt;m&lt;br /&gt;
::int c,cur=0, q,p0=0,p1=1,p2,m0=m;&lt;br /&gt;
::while (a) {&lt;br /&gt;
:::cur++;&lt;br /&gt;
:::c = m % a;&lt;br /&gt;
:::q = (m-c)/a;&lt;br /&gt;
:::p2 = q*p1+p0;&lt;br /&gt;
:::p0 = p1;&lt;br /&gt;
:::p1 = p2;&lt;br /&gt;
:::m = a;&lt;br /&gt;
:::a = c;&lt;br /&gt;
::}&lt;br /&gt;
::if (m==1) {&lt;br /&gt;
:::if (cur%2) &lt;br /&gt;
::::return p0;  &lt;br /&gt;
:::return m0-p0;&lt;br /&gt;
:::}&lt;br /&gt;
::return -1;&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Последовательная сложность алгоритма составляет &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; равен максимальному значению &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;i=1, ...,n &amp;lt;/math&amp;gt;. Основная сложность приходится на расчет обратного элемента к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по модулю &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; по расширенному Алгоритму Евклида, т.к при работе алгоритма Евклида (не расширенного) совершается максимальное число шагов &amp;lt;math&amp;gt;log(max\{a,b\})&amp;lt;/math&amp;gt;, когда подаются на вход числа &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; взаимно простые (по условию данной задачи рассматриваются только такие числа), и число шагов в расширенном алгоритме совпадает, то исходя из предложенной реализации расширенного Алгоритма Евклида сложность его работы составит &amp;lt;math&amp;gt;3logk&amp;lt;/math&amp;gt;. Всего данный алгоритм будет отрабатывать &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; раз, следовательно сложность Алгоритм решения линейной системы сравнений составит &amp;lt;math&amp;gt;3nlogk&amp;lt;/math&amp;gt;.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; пар числе &amp;lt;math&amp;gt;(a_i, m_i)&amp;lt;/math&amp;gt;, соответствующая линейному сравнению вида  &amp;lt;math&amp;gt; x &amp;amp;equiv; a_i &amp;amp;#8194;(mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;   , где &amp;lt;math&amp;gt;m_i&amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; a_i&amp;lt;/math&amp;gt; -некоторые целые числа, &amp;lt;math&amp;gt;i=1, ..., n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;2n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; число &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; - решение линейной системы сравнений.&lt;br /&gt;
&#039;&#039;&#039;Объем выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
#Применко Э.А. Алгебраические основы криптографии: Учебное пособие. M.:Книжный Дом &amp;quot;ЛИБРОКОМ&amp;quot;,2013.-288с.&lt;br /&gt;
#Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И. Защита информации: учебное пособие — М.: МФТИ, 2011. — 225 с. — ISBN 978-5-7417-0377-9&lt;br /&gt;
#Переславцева О. Н. Распараллеливание алгоритмов с применением китайской теоремы об остатках. — Вестник ТГУ, 2009. — № 4. — ISSN 1810-0198.&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=23794</id>
		<title>Участник:Кинжикеева Дина/ Алгоритм решения линейной системы сравнений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=23794"/>
		<updated>2017-11-07T10:27:26Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:Алгоритм: Алгоритм решения линейной системы сравнений.&lt;br /&gt;
:Исполнитель: Кинжикеева Дина.&lt;br /&gt;
&lt;br /&gt;
==  Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
Введем некоторые определения.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 1&#039;&#039;&#039; Пусть &#039;&#039;m&#039;&#039; целое число большее единицы (&#039;&#039;m&#039;&#039;&amp;gt;1). Говорят, что &#039;&#039;a&#039;&#039; &#039;&#039;сравнимо&#039;&#039; с &#039;&#039;b&#039;&#039; по &#039;&#039;модулю&#039;&#039; &#039;&#039;m&#039;&#039;, если &#039;&#039;m&#039;&#039; делит (&#039;&#039;a&#039;&#039;-&#039;&#039;b&#039;&#039;) (обозначение: &#039;&#039;m|(a-b)&#039;&#039;), а именно выполняется равенство: &#039;&#039;a = b+tm&#039;&#039;, где &#039;&#039;t&#039;&#039; некоторое целое число. Сравнение записывает таким образом: &amp;lt;math&amp;gt; a &amp;amp;equiv; b &amp;amp;#8194; (mod	&amp;amp;#8194; m) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 2&#039;&#039;&#039; Число НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) называется &#039;&#039;наибольшим общим делителем&#039;&#039; двух чисел &#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039; если:&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) делит оба числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;;&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) является наибольшим общим делителем чисел &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;, то если &#039;&#039;d|a&#039;&#039; и &#039;&#039;d|b&#039;&#039;, то &#039;&#039;d|&#039;&#039;НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) (или, что то же самое, &#039;&#039;d&#039;&#039; меньше либо равно НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 3&#039;&#039;&#039; Числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039; называются &#039;&#039;взаимно простыми&#039;&#039;, если НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)=1.&lt;br /&gt;
   &lt;br /&gt;
Задана линейная система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;&amp;amp;#8194; m_1,m_2,...,m_n &amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; &amp;amp;#8194; a_1, a_2,..., a_n&amp;lt;/math&amp;gt; -некоторые целые числа.&lt;br /&gt;
Рассматривается задача решения линейной системы сравнений вида, описанного выше. Данная система сравнений имеет единственное решение по модулю &amp;lt;math&amp;gt;M=m_1m_2...m_n &amp;lt;/math&amp;gt; по китайской теореме об остатках. Эта теорема утверждает, что можно восстановить целое число по множеству его остатков от деления числа из некоторого набора попарно взаимно простых чисел. Теорема в её арифметической формулировке была описана в трактате китайского математика Сунь Цзы, предположительно датируемом третьим веком н. э. и затем была обобщена Цинь Цзюшао в его книге «Математические рассуждения в 9 главах» датируемой 1247 годом, где было приведено точное решение. Утверждение этой теоремы можно рассматривать как алгоритм решения линейной системы сравнений требуемого вида. &lt;br /&gt;
Искомое решение ищется как сумма вида:&lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Алгоритм строится на утверждении китайской теоремы об остатках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&amp;lt;/u&amp;gt; &#039;&#039;(Китайская теорема об остатках)&#039;&#039;&lt;br /&gt;
:Пусть &amp;lt;math&amp;gt;m_1,m_2,...,m_n&amp;lt;/math&amp;gt; натуральные числа такие, что НОД(&amp;lt;math&amp;gt;m_i,m_j&amp;lt;/math&amp;gt;)=1, при &amp;lt;math&amp;gt;i≠j&amp;lt;/math&amp;gt; для любых &amp;lt;math&amp;gt;i,j=1,2,..,n&amp;lt;/math&amp;gt;. И пусть &amp;lt;math&amp;gt;a_1,a_2,...,a_n&amp;lt;/math&amp;gt; целые числа. Тогда система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:имеет единственное решение по модулю числа &amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;(1), &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;u&amp;gt;Доказательство.&amp;lt;/u&amp;gt; Докажем существование решения, а именно, что решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; удовлетворяет заданной системе сравнений. Рассмотрим &amp;lt;math&amp;gt;x &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Все слагаемые в сумме (1), кроме первого, делятся на &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt;, а первое слагаемое &amp;lt;math&amp;gt;a_1M_1N_1  &amp;amp;equiv; a_1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;M_1N_1&amp;amp;equiv;1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Таким образом, &amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;. Аналогичным образом для &amp;lt;math&amp;gt;m_2,..,m_n&amp;lt;/math&amp;gt;. Следовательно, &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; -решение.  &lt;br /&gt;
Покажем единственность решения. Пусть существуют два различных решения системы &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;. &lt;br /&gt;
:&amp;lt;math&amp;gt;x_0=x_1-x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
Тогда для любого &amp;lt;math&amp;gt;i=1,..,n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;&amp;amp;#8194; m_i|x_0&amp;lt;/math&amp;gt;, а следовательно и &amp;lt;math&amp;gt;M|x_0&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;M|(x_1-x_2)&amp;lt;/math&amp;gt;). Это означает, что &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; можно представить в виде: &amp;lt;math&amp;gt;x_1=x_2+kM&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; некоторое целое число. Следовательно, &amp;lt;math&amp;gt;x_1=x_2 &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;, что и требовалось доказать. Теорема доказана.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поэтапное описание алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Вычисление значения &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;&lt;br /&gt;
#Вычисление значений &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;, для всех &amp;lt;math&amp;gt;i=1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt;&lt;br /&gt;
#Нахождение обратных элементов к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по соответствующему модулю при помощи алгоритма Евклида. Описание расширенного алгоритма Евклида:&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; b) &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=a &amp;amp;#8194; t_1=b &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=t_1q_1+t_2&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_1=t_2q_2+t_3&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;...&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-2}=t_{k-1}q_{k-1}+t_{k} &amp;amp;#8194; t_{k}=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-1}=t_{k}q_{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_0=1 &amp;amp;#8194; p_1=q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_j=q_jp_{j-1}+p_{j-2} &amp;amp;#8194; j=2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}=(-1)^{k+1}p_{k-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Формирование итогового ответа.&lt;br /&gt;
#:&amp;lt;math&amp;gt; x=a_1 M_1 N_1+...+a_n M_n N_n &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
#Применко Э.А. Алгебраические основы криптографии: Учебное пособие. M.:Книжный Дом &amp;quot;ЛИБРОКОМ&amp;quot;,2013.-288с.&lt;br /&gt;
#Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И. Защита информации: учебное пособие — М.: МФТИ, 2011. — 225 с. — ISBN 978-5-7417-0377-9&lt;br /&gt;
#Переславцева О. Н. Распараллеливание алгоритмов с применением китайской теоремы об остатках. — Вестник ТГУ, 2009. — № 4. — ISSN 1810-0198.&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=23793</id>
		<title>Участник:Кинжикеева Дина/ Алгоритм решения линейной системы сравнений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=23793"/>
		<updated>2017-11-07T10:26:22Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Алгоритм: Алгоритм решения линейной системы сравнений.&lt;br /&gt;
Исполнитель: Кинжикеева Дина&lt;br /&gt;
&lt;br /&gt;
==  Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
Введем некоторые определения.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 1&#039;&#039;&#039; Пусть &#039;&#039;m&#039;&#039; целое число большее единицы (&#039;&#039;m&#039;&#039;&amp;gt;1). Говорят, что &#039;&#039;a&#039;&#039; &#039;&#039;сравнимо&#039;&#039; с &#039;&#039;b&#039;&#039; по &#039;&#039;модулю&#039;&#039; &#039;&#039;m&#039;&#039;, если &#039;&#039;m&#039;&#039; делит (&#039;&#039;a&#039;&#039;-&#039;&#039;b&#039;&#039;) (обозначение: &#039;&#039;m|(a-b)&#039;&#039;), а именно выполняется равенство: &#039;&#039;a = b+tm&#039;&#039;, где &#039;&#039;t&#039;&#039; некоторое целое число. Сравнение записывает таким образом: &amp;lt;math&amp;gt; a &amp;amp;equiv; b &amp;amp;#8194; (mod	&amp;amp;#8194; m) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 2&#039;&#039;&#039; Число НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) называется &#039;&#039;наибольшим общим делителем&#039;&#039; двух чисел &#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039; если:&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) делит оба числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;;&lt;br /&gt;
# НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) является наибольшим общим делителем чисел &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;, то если &#039;&#039;d|a&#039;&#039; и &#039;&#039;d|b&#039;&#039;, то &#039;&#039;d|&#039;&#039;НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) (или, что то же самое, &#039;&#039;d&#039;&#039; меньше либо равно НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 3&#039;&#039;&#039; Числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039; называются &#039;&#039;взаимно простыми&#039;&#039;, если НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)=1.&lt;br /&gt;
   &lt;br /&gt;
Задана линейная система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;&amp;amp;#8194; m_1,m_2,...,m_n &amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; &amp;amp;#8194; a_1, a_2,..., a_n&amp;lt;/math&amp;gt; -некоторые целые числа.&lt;br /&gt;
Рассматривается задача решения линейной системы сравнений вида, описанного выше. Данная система сравнений имеет единственное решение по модулю &amp;lt;math&amp;gt;M=m_1m_2...m_n &amp;lt;/math&amp;gt; по китайской теореме об остатках. Эта теорема утверждает, что можно восстановить целое число по множеству его остатков от деления числа из некоторого набора попарно взаимно простых чисел. Теорема в её арифметической формулировке была описана в трактате китайского математика Сунь Цзы, предположительно датируемом третьим веком н. э. и затем была обобщена Цинь Цзюшао в его книге «Математические рассуждения в 9 главах» датируемой 1247 годом, где было приведено точное решение. Утверждение этой теоремы можно рассматривать как алгоритм решения линейной системы сравнений требуемого вида. &lt;br /&gt;
Искомое решение ищется как сумма вида:&lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Алгоритм строится на утверждении китайской теоремы об остатках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&amp;lt;/u&amp;gt; &#039;&#039;(Китайская теорема об остатках)&#039;&#039;&lt;br /&gt;
:Пусть &amp;lt;math&amp;gt;m_1,m_2,...,m_n&amp;lt;/math&amp;gt; натуральные числа такие, что НОД(&amp;lt;math&amp;gt;m_i,m_j&amp;lt;/math&amp;gt;)=1, при &amp;lt;math&amp;gt;i≠j&amp;lt;/math&amp;gt; для любых &amp;lt;math&amp;gt;i,j=1,2,..,n&amp;lt;/math&amp;gt;. И пусть &amp;lt;math&amp;gt;a_1,a_2,...,a_n&amp;lt;/math&amp;gt; целые числа. Тогда система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:имеет единственное решение по модулю числа &amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;(1), &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;u&amp;gt;Доказательство.&amp;lt;/u&amp;gt; Докажем существование решения, а именно, что решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; удовлетворяет заданной системе сравнений. Рассмотрим &amp;lt;math&amp;gt;x &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Все слагаемые в сумме (1), кроме первого, делятся на &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt;, а первое слагаемое &amp;lt;math&amp;gt;a_1M_1N_1  &amp;amp;equiv; a_1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;M_1N_1&amp;amp;equiv;1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Таким образом, &amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;. Аналогичным образом для &amp;lt;math&amp;gt;m_2,..,m_n&amp;lt;/math&amp;gt;. Следовательно, &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; -решение.  &lt;br /&gt;
Покажем единственность решения. Пусть существуют два различных решения системы &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;. &lt;br /&gt;
:&amp;lt;math&amp;gt;x_0=x_1-x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
Тогда для любого &amp;lt;math&amp;gt;i=1,..,n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;&amp;amp;#8194; m_i|x_0&amp;lt;/math&amp;gt;, а следовательно и &amp;lt;math&amp;gt;M|x_0&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;M|(x_1-x_2)&amp;lt;/math&amp;gt;). Это означает, что &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; можно представить в виде: &amp;lt;math&amp;gt;x_1=x_2+kM&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; некоторое целое число. Следовательно, &amp;lt;math&amp;gt;x_1=x_2 &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;, что и требовалось доказать. Теорема доказана.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поэтапное описание алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Вычисление значения &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;&lt;br /&gt;
#Вычисление значений &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;, для всех &amp;lt;math&amp;gt;i=1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt;&lt;br /&gt;
#Нахождение обратных элементов к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по соответствующему модулю при помощи алгоритма Евклида. Описание расширенного алгоритма Евклида:&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; b) &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=a &amp;amp;#8194; t_1=b &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=t_1q_1+t_2&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_1=t_2q_2+t_3&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;...&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-2}=t_{k-1}q_{k-1}+t_{k} &amp;amp;#8194; t_{k}=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-1}=t_{k}q_{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_0=1 &amp;amp;#8194; p_1=q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_j=q_jp_{j-1}+p_{j-2} &amp;amp;#8194; j=2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}=(-1)^{k+1}p_{k-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Формирование итогового ответа.&lt;br /&gt;
#:&amp;lt;math&amp;gt; x=a_1 M_1 N_1+...+a_n M_n N_n &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
#Применко Э.А. Алгебраические основы криптографии: Учебное пособие. M.:Книжный Дом &amp;quot;ЛИБРОКОМ&amp;quot;,2013.-288с.&lt;br /&gt;
#Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И. Защита информации: учебное пособие — М.: МФТИ, 2011. — 225 с. — ISBN 978-5-7417-0377-9&lt;br /&gt;
#Переславцева О. Н. Распараллеливание алгоритмов с применением китайской теоремы об остатках. — Вестник ТГУ, 2009. — № 4. — ISSN 1810-0198.&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=23222</id>
		<title>Участник:Кинжикеева Дина/ Алгоритм решения линейной системы сравнений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=23222"/>
		<updated>2017-10-22T04:54:01Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
Введем некоторые определения.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 1&#039;&#039;&#039; Пусть &#039;&#039;m&#039;&#039; целое число большее единицы (&#039;&#039;m&#039;&#039;&amp;gt;1). Говорят, что &#039;&#039;a&#039;&#039; &#039;&#039;сравнимо&#039;&#039; с &#039;&#039;b&#039;&#039; по &#039;&#039;модулю&#039;&#039; &#039;&#039;m&#039;&#039;, если &#039;&#039;m&#039;&#039; делит (&#039;&#039;a&#039;&#039;-&#039;&#039;b&#039;&#039;) (обозначение: &#039;&#039;m|(a-b)&#039;&#039;), а именно выполняется равенство: &#039;&#039;a = b+tm&#039;&#039;, где &#039;&#039;t&#039;&#039; некоторое целое число. Сравнение записывает таким образом: &amp;lt;math&amp;gt; a &amp;amp;equiv; b &amp;amp;#8194; (mod	&amp;amp;#8194; m) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 2&#039;&#039;&#039; Число НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) называется &#039;&#039;наибольшим общим делителем&#039;&#039; двух чисел &#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039; если:&lt;br /&gt;
## НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) делит оба числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;;&lt;br /&gt;
## НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) является наибольшим общим делителем чисел &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;, то если &#039;&#039;d|a&#039;&#039; и &#039;&#039;d|b&#039;&#039;, то &#039;&#039;d|&#039;&#039;НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) (или, что то же самое, &#039;&#039;d&#039;&#039; меньше либо рано НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 3&#039;&#039;&#039; Числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039; называются &#039;&#039;взаимно простыми&#039;&#039;, если НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)=1.&lt;br /&gt;
   &lt;br /&gt;
Задана линейная система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;&amp;amp;#8194; m_1,m_2,...,m_n &amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; &amp;amp;#8194; a_1, a_2,..., a_n&amp;lt;/math&amp;gt; -некоторые целые числа.&lt;br /&gt;
Рассматривается задача решения линейной системы сравнений вида, описанного выше. Данная система сравнений имеет единственное решение по модулю &amp;lt;math&amp;gt;M=m_1m_2...m_n &amp;lt;/math&amp;gt; по китайской теореме об остатках. Эта теорема утверждает, что можно восстановить целое число по множеству его остатков от деления числа из некоторого набора попарно взаимно простых чисел. Теорема в её арифметической формулировке была описана в трактате китайского математика Сунь Цзы, предположительно датируемом третьим веком н. э. и затем была обобщена Цинь Цзюшао в его книге «Математические рассуждения в 9 главах» датируемой 1247 годом, где было приведено точное решение. Утверждение этой теоремы можно рассматривать как алгоритм решения линейной системы сравнений требуемого вида. &lt;br /&gt;
Искомое решение ищется как сумма вида:&lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Алгоритм строится на утверждении китайской теоремы об остатках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&amp;lt;/u&amp;gt; &#039;&#039;(Китайская теорема об остатках)&#039;&#039;&lt;br /&gt;
:Пусть &amp;lt;math&amp;gt;m_1,m_2,...,m_n&amp;lt;/math&amp;gt; натуральные числа такие, что НОД(&amp;lt;math&amp;gt;m_i,m_j&amp;lt;/math&amp;gt;)=1, при &amp;lt;math&amp;gt;i≠j&amp;lt;/math&amp;gt; для любых &amp;lt;math&amp;gt;i,j=1,2,..,n&amp;lt;/math&amp;gt;. И пусть &amp;lt;math&amp;gt;a_1,a_2,...,a_n&amp;lt;/math&amp;gt; целые числа. Тогда система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:имеет единственное решение по модулю числа &amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;(1), &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;u&amp;gt;Доказательство.&amp;lt;/u&amp;gt; Докажем существование решения, а именно, что решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; удовлетворяет заданной системе сравнений. Рассмотрим &amp;lt;math&amp;gt;x &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Все слагаемые в сумме (1), кроме первого, делятся на &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt;, а первое слагаемое &amp;lt;math&amp;gt;a_1M_1N_1  &amp;amp;equiv; a_1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;M_1N_1&amp;amp;equiv;1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Таким образом, &amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;. Аналогичным образом для &amp;lt;math&amp;gt;m_2,..,m_n&amp;lt;/math&amp;gt;. Следовательно, &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; -решение.  &lt;br /&gt;
Покажем единственность решения. Пусть существуют два различных решения системы &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;. &lt;br /&gt;
:&amp;lt;math&amp;gt;x_0=x_1-x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
Тогда для любого &amp;lt;math&amp;gt;i=1,..,n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;&amp;amp;#8194; m_i|x_0&amp;lt;/math&amp;gt;, а следовательно и &amp;lt;math&amp;gt;M|x_0&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;M|(x_1-x_2)&amp;lt;/math&amp;gt;). Это означает, что &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; можно представить в виде: &amp;lt;math&amp;gt;x_1=x_2+kM&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; некоторое целое число. Следовательно, &amp;lt;math&amp;gt;x_1=x_2 &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;, что и требовалось доказать. Теорема доказана.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поэтапное описание алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Вычисление значения &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;&lt;br /&gt;
#Вычисление значений &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;, для всех &amp;lt;math&amp;gt;i=1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt;&lt;br /&gt;
#Нахождение обратных элементов к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по соответствующему модулю при помощи алгоритма Евклида. Описание расширенного алгоритма Евклида:&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; b) &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=a &amp;amp;#8194; t_1=b &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=t_1q_1+t_2&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_1=t_2q_2+t_3&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;...&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-2}=t_{k-1}q_{k-1}+t_{k} &amp;amp;#8194; t_{k}=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-1}=t_{k}q_{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_0=1 &amp;amp;#8194; p_1=q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_j=q_jp_{j-1}+p_{j-2} &amp;amp;#8194; j=2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}=(-1)^{k+1}p_{k-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Формирование итогового ответа.&lt;br /&gt;
#:&amp;lt;math&amp;gt; x=a_1 M_1 N_1+...+a_n M_n N_n &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
#Применко Э.А. Алгебраические основы криптографии: Учебное пособие. M.:Книжный Дом &amp;quot;ЛИБРОКОМ&amp;quot;,2013.-288с.&lt;br /&gt;
#Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И. Защита информации: учебное пособие — М.: МФТИ, 2011. — 225 с. — ISBN 978-5-7417-0377-9&lt;br /&gt;
#Переславцева О. Н. Распараллеливание алгоритмов с применением китайской теоремы об остатках. — Вестник ТГУ, 2009. — № 4. — ISSN 1810-0198.&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=23221</id>
		<title>Участник:Кинжикеева Дина/ Алгоритм решения линейной системы сравнений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D0%B8%D0%BD%D0%B6%D0%B8%D0%BA%D0%B5%D0%B5%D0%B2%D0%B0_%D0%94%D0%B8%D0%BD%D0%B0/_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=23221"/>
		<updated>2017-10-22T04:41:41Z</updated>

		<summary type="html">&lt;p&gt;Кинжикеева Дина: Новая страница: «==  Свойства и структура алгоритма == === Общее описание алгоритма === ---- Введем некоторые оп…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
Введем некоторые определения.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 1&#039;&#039;&#039; Пусть &#039;&#039;m&#039;&#039; целое число большее единицы (&#039;&#039;m&#039;&#039;&amp;gt;1). Говорят, что &#039;&#039;a&#039;&#039; &#039;&#039;сравнимо&#039;&#039; с &#039;&#039;b&#039;&#039; по &#039;&#039;модулю&#039;&#039; &#039;&#039;m&#039;&#039;, если &#039;&#039;m&#039;&#039; делит (&#039;&#039;a&#039;&#039;-&#039;&#039;b&#039;&#039;) (обозначение: &#039;&#039;m|(a-b)&#039;&#039;), а именно выполняется равенство: &#039;&#039;a = b+tm&#039;&#039;, где &#039;&#039;t&#039;&#039; некоторое целое число. Сравнение записывает таким образом: &amp;lt;math&amp;gt; a &amp;amp;equiv; b &amp;amp;#8194; (mod	&amp;amp;#8194; m) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 2&#039;&#039;&#039; Число НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) называется &#039;&#039;наибольшим общим делителем&#039;&#039; двух чисел &#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039; если:&lt;br /&gt;
## НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) делит оба числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;;&lt;br /&gt;
## НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) является наибольшим общим делителем чисел &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039;, то если &#039;&#039;d|a&#039;&#039; и &#039;&#039;d|b&#039;&#039;, то &#039;&#039;d|&#039;&#039;НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;) (или, что то же самое, &#039;&#039;d&#039;&#039; меньше либо рано НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Определение 3&#039;&#039;&#039; Числа &#039;&#039;a&#039;&#039; и &#039;&#039;b&#039;&#039; называются &#039;&#039;взаимно простыми&#039;&#039;, если НОД(&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)=1.&lt;br /&gt;
   &lt;br /&gt;
Задана линейная система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;&amp;amp;#8194; m_1,m_2,...,m_n &amp;lt;/math&amp;gt; - натуральные взаимно простые числа,  &amp;lt;math&amp;gt; &amp;amp;#8194; a_1, a_2,..., a_n&amp;lt;/math&amp;gt; -некоторые целые числа.&lt;br /&gt;
Рассматривается задача решения линейной системы сравнений вида, описанного выше. Данная система сравнений имеет единственное решение по модулю &amp;lt;math&amp;gt;M=m_1m_2...m_n &amp;lt;/math&amp;gt; по китайской теореме об остатках. Эта теорема утверждает, что можно восстановить целое число по множеству его остатков от деления числа из некоторого набора попарно взаимно простых чисел. Теорема в её арифметической формулировке была описана в трактате китайского математика Сунь Цзы, предположительно датируемом третьим веком н. э. и затем была обобщена Цинь Цзюшао в его книге «Математические рассуждения в 9 главах» датируемой 1247 годом, где было приведено точное решение. Утверждение этой теоремы можно рассматривать как алгоритм решения линейной системы сравнений требуемого вида. &lt;br /&gt;
Искомое решение ищется как сумма вида:&lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Алгоритм строится на утверждении китайской теоремы об остатках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&amp;lt;/u&amp;gt; &#039;&#039;(Китайская теорема об остатках)&#039;&#039;&lt;br /&gt;
:Пусть &amp;lt;math&amp;gt;m_1,m_2,...,m_n&amp;lt;/math&amp;gt; натуральные числа такие, что НОД(&amp;lt;math&amp;gt;m_i,m_j&amp;lt;/math&amp;gt;)=1, при &amp;lt;math&amp;gt;i≠j&amp;lt;/math&amp;gt; для любых &amp;lt;math&amp;gt;i,j=1,2,..,n&amp;lt;/math&amp;gt;. И пусть &amp;lt;math&amp;gt;a_1,a_2,...,a_n&amp;lt;/math&amp;gt; целые числа. Тогда система сравнений вида:&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_2 &amp;amp;#8194;(mod &amp;amp;#8194; m_2) &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt; ... &amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x &amp;amp;equiv; a_n &amp;amp;#8194;(mod &amp;amp;#8194; m_n) &amp;amp;#8194;, &amp;lt;/math&amp;gt;&lt;br /&gt;
:имеет единственное решение по модулю числа &amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt; x= &amp;amp;sum;_{i=1}^{n} a_i M_i N_i &amp;amp;#8194; (mod &amp;amp;#8194; M) &amp;amp;#8194;(1), &amp;lt;/math&amp;gt;&lt;br /&gt;
:где &amp;lt;math&amp;gt;M_i=M &amp;amp;#160; / &amp;amp;#160; m_i  &amp;amp;#8194; , &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;N_i= M_{i}^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; m_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;u&amp;gt;Доказательство.&amp;lt;/u&amp;gt; Докажем существование решения, а именно, что решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; удовлетворяет заданной системе сравнений. Рассмотрим &amp;lt;math&amp;gt;x &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Все слагаемые в сумме (1), кроме первого, делятся на &amp;lt;math&amp;gt;m_1&amp;lt;/math&amp;gt;, а первое слагаемое &amp;lt;math&amp;gt;a_1M_1N_1  &amp;amp;equiv; a_1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;M_1N_1&amp;amp;equiv;1 &amp;amp;#8194; (mod &amp;amp;#8194; m_1)&amp;lt;/math&amp;gt;. Таким образом, &amp;lt;math&amp;gt;x &amp;amp;equiv; a_1 &amp;amp;#8194;(mod &amp;amp;#8194; m_1) &amp;lt;/math&amp;gt;. Аналогичным образом для &amp;lt;math&amp;gt;m_2,..,m_n&amp;lt;/math&amp;gt;. Следовательно, &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; -решение.  &lt;br /&gt;
Покажем единственность решения. Пусть существуют два различных решения системы &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;. &lt;br /&gt;
:&amp;lt;math&amp;gt;x_0=x_1-x_2&amp;lt;/math&amp;gt;&lt;br /&gt;
Тогда для любого &amp;lt;math&amp;gt;i=1,..,n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;&amp;amp;#8194; m_i|x_0&amp;lt;/math&amp;gt;, а следовательно и &amp;lt;math&amp;gt;M|x_0&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;M|(x_1-x_2)&amp;lt;/math&amp;gt;). Это означает, что &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; можно представить в виде: &amp;lt;math&amp;gt;x_1=x_2+kM&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; некоторое целое число. Следовательно, &amp;lt;math&amp;gt;x_1=x_2 &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;, что и требовалось доказать. Теорема доказана.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поэтапное описание алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Вычисление значения &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M=m_1m_2...m_n&amp;lt;/math&amp;gt;&lt;br /&gt;
#Вычисление значений &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt;, для всех &amp;lt;math&amp;gt;i=1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
#:&amp;lt;math&amp;gt;M_i=M/m_i&amp;lt;/math&amp;gt;&lt;br /&gt;
#Нахождение обратных элементов к &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; по соответствующему модулю при помощи алгоритма Евклида. Описание расширенного алгоритма Евклида:&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}&amp;amp;#8194; (mod &amp;amp;#8194; b) &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=a &amp;amp;#8194; t_1=b &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_0=t_1q_1+t_2&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_1=t_2q_2+t_3&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;...&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-2}=t_{k-1}q_{k-1}+t_{k} &amp;amp;#8194; t_{k}=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;t_{k-1}=t_{k}q_{k}&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_0=1 &amp;amp;#8194; p_1=q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;p_j=q_jp_{j-1}+p_{j-2} &amp;amp;#8194; j=2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
#:&amp;lt;math&amp;gt;a^{-1}=(-1)^{k+1}p_{k-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Формирование итогового ответа.&lt;br /&gt;
#:&amp;lt;math&amp;gt; x=a_1 M_1 N_1+...+a_n M_n N_n &amp;amp;#8194; (mod &amp;amp;#8194; M)&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Кинжикеева Дина</name></author>
	</entry>
</feed>