<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ArtemZholus</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ArtemZholus"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%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/ArtemZholus"/>
		<updated>2026-06-08T18:52:33Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60396</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60396"/>
				<updated>2017-01-31T18:57:05Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последний ненулевой член этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается третий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД(это следует из утверждений [[#l3 | о НОДе четных и нечетных]] и [[#l2 | о НОДе нуля]]).&lt;br /&gt;
&lt;br /&gt;
Можно показать&amp;lt;ref&amp;gt;http://maths-people.anu.edu.au/~brent/pd/rpb183pr.pdf Twenty years' analysis of the Binary Euclidean Algorithm&amp;lt;/ref&amp;gt;, что этот алгоритм, в среднем на 60% более эффективен, чем классический.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
В стандартном алгоритме, мы использовали следующее свойство: &amp;lt;tex&amp;gt;\gcd(a, b) = \gcd(b, a \bmod b)&amp;lt;/tex&amp;gt;. Воспользуемся им для того, чтобы решить следующую задачу: найти &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;ax + by = \gcd(a, b)&amp;lt;/tex&amp;gt;. Пусть мы нашли пару &amp;lt;tex&amp;gt;x_1, y_1: \: bx_1 + (a \bmod b)y_1 = \gcd(a, b)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;a \bmod b = a - \lfloor \frac{a}{b}\rfloor b&amp;lt;/tex&amp;gt;. Получаем: &amp;lt;tex&amp;gt;bx_1 + (a \bmod b)y_1 = b x_1 + \left(a - \lfloor \frac{a}{b}\rfloor b\right)y_1 = &lt;br /&gt;
b\left(x_1 - \lfloor \frac{a}{b}\rfloor y_1\right) + a y_1&amp;lt;/tex&amp;gt;. Следовательно, приходим к расширенному алгоритму Евклида:&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Алгоритм возвращает тройку &amp;lt;tex&amp;gt;\gcd, x, y&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{extendedGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} == 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}, 0, 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd, x_1, y_1} \leftarrow \mathtt{extendedGcd(b, a} \bmod \mathtt{b)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{x} \leftarrow \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{y} \leftarrow \mathtt{x_1} - (\mathtt{a} \text{ div } \mathtt{b}) \cdot \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd, x, y}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Такое представление наибольшего общего делителя называется '''соотношением Безу''', а числа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Разложение_на_множители_(факторизация) | Разложение на множители]]&lt;br /&gt;
* [[Простые_числа | Простые числа]]&lt;br /&gt;
* [[Основная_теорема_арифметики | Основная теорема арифметики]]&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Greatest_common_divisor Wikipedia {{---}} Greatest common divisor]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Binary_GCD_algorithm Wikipedia {{---}} Binary GCD Algorithm]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60393</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60393"/>
				<updated>2017-01-31T17:56:51Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Стандартный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последний ненулевой член этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается третий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД(это следует из утверждений [[#l3 | о НОДе четных и нечетных]] и [[#l2 | о НОДе нуля]]).&lt;br /&gt;
&lt;br /&gt;
Можно показать&amp;lt;ref&amp;gt;http://maths-people.anu.edu.au/~brent/pd/rpb183pr.pdf Twenty years' analysis of the Binary Euclidean Algorithm&amp;lt;/ref&amp;gt;, что этот алгоритм, в среднем на 60% более эффективен, чем классический.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
В стандартном алгоритме, мы использовали следующее свойство: &amp;lt;tex&amp;gt;\gcd(a, b) = \gcd(b, a \bmod b)&amp;lt;/tex&amp;gt;. Воспользуемся им для того, чтобы решить следующую задачу: найти &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;ax + by = \gcd(a, b)&amp;lt;/tex&amp;gt;. Пусть мы нашли пару &amp;lt;tex&amp;gt;x_1, y_1: \: bx_1 + (a \bmod b)y_1 = \gcd(a, b)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;a \bmod b = a - \lfloor \frac{a}{b}\rfloor b&amp;lt;/tex&amp;gt;. Получаем: &amp;lt;tex&amp;gt;bx_1 + (a \bmod b)y_1 = b x_1 + \left(a - \lfloor \frac{a}{b}\rfloor b\right)y_1 = &lt;br /&gt;
b\left(x_1 - \lfloor \frac{a}{b}\rfloor y_1\right) + a y_1&amp;lt;/tex&amp;gt;. Следовательно, приходим к расширенному алгоритму Евклида:&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Алгоритм возвращает тройку &amp;lt;tex&amp;gt;\gcd, x, y&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{extendedGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} == 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}, 0, 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd, x_1, y_1} \leftarrow \mathtt{extendedGcd(b, a} \bmod \mathtt{b)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{x} \leftarrow \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{y} \leftarrow \mathtt{x_1} - (\mathtt{a} \text{ div } \mathtt{b}) \cdot \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd, x, y}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Такое представление наибольшего общего делителя называется '''соотношением Безу''', а числа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Разложение_на_множители_(факторизация) | Разложение на множители]]&lt;br /&gt;
* [[Простые_числа | Простые числа]]&lt;br /&gt;
* [[Основная_теорема_арифметики | Основная теорема арифметики]]&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Greatest_common_divisor Wikipedia {{---}} Greatest common divisor]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Binary_GCD_algorithm Wikipedia {{---}} Binary GCD Algorithm]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60392</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60392"/>
				<updated>2017-01-31T17:56:13Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Двоичный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается третий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД(это следует из утверждений [[#l3 | о НОДе четных и нечетных]] и [[#l2 | о НОДе нуля]]).&lt;br /&gt;
&lt;br /&gt;
Можно показать&amp;lt;ref&amp;gt;http://maths-people.anu.edu.au/~brent/pd/rpb183pr.pdf Twenty years' analysis of the Binary Euclidean Algorithm&amp;lt;/ref&amp;gt;, что этот алгоритм, в среднем на 60% более эффективен, чем классический.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
В стандартном алгоритме, мы использовали следующее свойство: &amp;lt;tex&amp;gt;\gcd(a, b) = \gcd(b, a \bmod b)&amp;lt;/tex&amp;gt;. Воспользуемся им для того, чтобы решить следующую задачу: найти &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;ax + by = \gcd(a, b)&amp;lt;/tex&amp;gt;. Пусть мы нашли пару &amp;lt;tex&amp;gt;x_1, y_1: \: bx_1 + (a \bmod b)y_1 = \gcd(a, b)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;a \bmod b = a - \lfloor \frac{a}{b}\rfloor b&amp;lt;/tex&amp;gt;. Получаем: &amp;lt;tex&amp;gt;bx_1 + (a \bmod b)y_1 = b x_1 + \left(a - \lfloor \frac{a}{b}\rfloor b\right)y_1 = &lt;br /&gt;
b\left(x_1 - \lfloor \frac{a}{b}\rfloor y_1\right) + a y_1&amp;lt;/tex&amp;gt;. Следовательно, приходим к расширенному алгоритму Евклида:&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Алгоритм возвращает тройку &amp;lt;tex&amp;gt;\gcd, x, y&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{extendedGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} == 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}, 0, 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd, x_1, y_1} \leftarrow \mathtt{extendedGcd(b, a} \bmod \mathtt{b)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{x} \leftarrow \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{y} \leftarrow \mathtt{x_1} - (\mathtt{a} \text{ div } \mathtt{b}) \cdot \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd, x, y}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Такое представление наибольшего общего делителя называется '''соотношением Безу''', а числа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Разложение_на_множители_(факторизация) | Разложение на множители]]&lt;br /&gt;
* [[Простые_числа | Простые числа]]&lt;br /&gt;
* [[Основная_теорема_арифметики | Основная теорема арифметики]]&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Greatest_common_divisor Wikipedia {{---}} Greatest common divisor]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Binary_GCD_algorithm Wikipedia {{---}} Binary GCD Algorithm]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60390</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60390"/>
				<updated>2017-01-31T01:49:47Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* См. также */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается третий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД(это следует из утверждений [[#l3 | о НОДе четных и нечетных]] и [[#l2 | о НОДе нуля]]).&lt;br /&gt;
&lt;br /&gt;
Можно показать&amp;lt;ref&amp;gt;http://maths-people.anu.edu.au/~brent/pd/rpb183pr.pdf Twenty years' analysis of the Binary Euclidean Algorithm&amp;lt;/ref&amp;gt;, что этот алгоритм, в среднем на 60% более эффективен, чем классический. Но, к сожалению, в худшем случае он работает за &amp;lt;tex&amp;gt;O(\log^2\min(a, b))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
В стандартном алгоритме, мы использовали следующее свойство: &amp;lt;tex&amp;gt;\gcd(a, b) = \gcd(b, a \bmod b)&amp;lt;/tex&amp;gt;. Воспользуемся им для того, чтобы решить следующую задачу: найти &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;ax + by = \gcd(a, b)&amp;lt;/tex&amp;gt;. Пусть мы нашли пару &amp;lt;tex&amp;gt;x_1, y_1: \: bx_1 + (a \bmod b)y_1 = \gcd(a, b)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;a \bmod b = a - \lfloor \frac{a}{b}\rfloor b&amp;lt;/tex&amp;gt;. Получаем: &amp;lt;tex&amp;gt;bx_1 + (a \bmod b)y_1 = b x_1 + \left(a - \lfloor \frac{a}{b}\rfloor b\right)y_1 = &lt;br /&gt;
b\left(x_1 - \lfloor \frac{a}{b}\rfloor y_1\right) + a y_1&amp;lt;/tex&amp;gt;. Следовательно, приходим к расширенному алгоритму Евклида:&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Алгоритм возвращает тройку &amp;lt;tex&amp;gt;\gcd, x, y&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{extendedGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} == 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}, 0, 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd, x_1, y_1} \leftarrow \mathtt{extendedGcd(b, a} \bmod \mathtt{b)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{x} \leftarrow \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{y} \leftarrow \mathtt{x_1} - (\mathtt{a} \text{ div } \mathtt{b}) \cdot \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd, x, y}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Такое представление наибольшего общего делителя называется '''соотношением Безу''', а числа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Разложение_на_множители_(факторизация) | Разложение на множители]]&lt;br /&gt;
* [[Простые_числа | Простые числа]]&lt;br /&gt;
* [[Основная_теорема_арифметики | Основная теорема арифметики]]&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Greatest_common_divisor Wikipedia {{---}} Greatest common divisor]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Binary_GCD_algorithm Wikipedia {{---}} Binary GCD Algorithm]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60389</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60389"/>
				<updated>2017-01-31T01:47:06Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается третий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД(это следует из утверждений [[#l3 | о НОДе четных и нечетных]] и [[#l2 | о НОДе нуля]]).&lt;br /&gt;
&lt;br /&gt;
Можно показать&amp;lt;ref&amp;gt;http://maths-people.anu.edu.au/~brent/pd/rpb183pr.pdf Twenty years' analysis of the Binary Euclidean Algorithm&amp;lt;/ref&amp;gt;, что этот алгоритм, в среднем на 60% более эффективен, чем классический. Но, к сожалению, в худшем случае он работает за &amp;lt;tex&amp;gt;O(\log^2\min(a, b))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
В стандартном алгоритме, мы использовали следующее свойство: &amp;lt;tex&amp;gt;\gcd(a, b) = \gcd(b, a \bmod b)&amp;lt;/tex&amp;gt;. Воспользуемся им для того, чтобы решить следующую задачу: найти &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;ax + by = \gcd(a, b)&amp;lt;/tex&amp;gt;. Пусть мы нашли пару &amp;lt;tex&amp;gt;x_1, y_1: \: bx_1 + (a \bmod b)y_1 = \gcd(a, b)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;a \bmod b = a - \lfloor \frac{a}{b}\rfloor b&amp;lt;/tex&amp;gt;. Получаем: &amp;lt;tex&amp;gt;bx_1 + (a \bmod b)y_1 = b x_1 + \left(a - \lfloor \frac{a}{b}\rfloor b\right)y_1 = &lt;br /&gt;
b\left(x_1 - \lfloor \frac{a}{b}\rfloor y_1\right) + a y_1&amp;lt;/tex&amp;gt;. Следовательно, приходим к расширенному алгоритму Евклида:&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Алгоритм возвращает тройку &amp;lt;tex&amp;gt;\gcd, x, y&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{extendedGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} == 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}, 0, 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd, x_1, y_1} \leftarrow \mathtt{extendedGcd(b, a} \bmod \mathtt{b)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{x} \leftarrow \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{y} \leftarrow \mathtt{x_1} - (\mathtt{a} \text{ div } \mathtt{b}) \cdot \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd, x, y}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Такое представление наибольшего общего делителя называется '''соотношением Безу''', а числа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Разложение_на_множители_(факторизация) | Разложение на множители]]&lt;br /&gt;
* [[Простые_числа | Простые числа]]&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Greatest_common_divisor Wikipedia {{---}} Greatest common divisor]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Binary_GCD_algorithm Wikipedia {{---}} Binary GCD Algorithm]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60388</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60388"/>
				<updated>2017-01-31T01:44:01Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* См. также */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается третий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД(это следует из утверждений [[#l3 | о НОДе четных и нечетных]] и [[#l2 | о НОДе нуля]]).&lt;br /&gt;
&lt;br /&gt;
Можно показать&amp;lt;ref&amp;gt;http://maths-people.anu.edu.au/~brent/pd/rpb183pr.pdf Twenty years' analysis of the Binary Euclidean Algorithm&amp;lt;/ref&amp;gt;, что этот алгоритм, в среднем на 60% более эффективен, чем классический. Но, к сожалению, в худшем случае он работает за &amp;lt;tex&amp;gt;O(\log^2\min(a, b))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
В стандартном алгоритме, мы использовали следующее свойство: &amp;lt;tex&amp;gt;\gcd(a, b) = \gcd(b, a \bmod b)&amp;lt;/tex&amp;gt;. Воспользуемся им для того, чтобы решить следующую задачу: найти &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;ax + by = \gcd(a, b)&amp;lt;/tex&amp;gt;. Пусть мы нашли пару &amp;lt;tex&amp;gt;x_1, y_1: \: bx_1 + (a \bmod b)y_1 = \gcd(a, b)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;a \bmod b = a - \lfloor \frac{a}{b}\rfloor b&amp;lt;/tex&amp;gt;. Получаем: &amp;lt;tex&amp;gt;bx_1 + (a \bmod b)y_1 = b x_1 + \left(a - \lfloor \frac{a}{b}\rfloor b\right)y_1 = &lt;br /&gt;
b\left(x_1 - \lfloor \frac{a}{b}\rfloor y_1\right) + a y_1&amp;lt;/tex&amp;gt;. Следовательно, приходим к расширенному алгоритму Евклида:&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Алгоритм возвращает тройку &amp;lt;tex&amp;gt;\gcd, x, y&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{extendedGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} == 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}, 0, 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd, x_1, y_1} \leftarrow \mathtt{extendedGcd(b, a} \bmod \mathtt{b)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{x} \leftarrow \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{y} \leftarrow \mathtt{x_1} - (\mathtt{a} \text{ div } \mathtt{b}) \cdot \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd, x, y}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Такое представление наибольшего общего делителя называется '''соотношением Безу''', а числа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Разложение_на_множители_(факторизация) | Разложение на множители]]&lt;br /&gt;
* [[Простые_числа | Простые числа]]&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;br /&gt;
==Источники информации==&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60387</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60387"/>
				<updated>2017-01-31T01:41:58Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается третий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД(это следует из утверждений [[#l3 | о НОДе четных и нечетных]] и [[#l2 | о НОДе нуля]]).&lt;br /&gt;
&lt;br /&gt;
Можно показать&amp;lt;ref&amp;gt;http://maths-people.anu.edu.au/~brent/pd/rpb183pr.pdf Twenty years' analysis of the Binary Euclidean Algorithm&amp;lt;/ref&amp;gt;, что этот алгоритм, в среднем на 60% более эффективен, чем классический. Но, к сожалению, в худшем случае он работает за &amp;lt;tex&amp;gt;O(\log^2\min(a, b))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
В стандартном алгоритме, мы использовали следующее свойство: &amp;lt;tex&amp;gt;\gcd(a, b) = \gcd(b, a \bmod b)&amp;lt;/tex&amp;gt;. Воспользуемся им для того, чтобы решить следующую задачу: найти &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;ax + by = \gcd(a, b)&amp;lt;/tex&amp;gt;. Пусть мы нашли пару &amp;lt;tex&amp;gt;x_1, y_1: \: bx_1 + (a \bmod b)y_1 = \gcd(a, b)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;a \bmod b = a - \lfloor \frac{a}{b}\rfloor b&amp;lt;/tex&amp;gt;. Получаем: &amp;lt;tex&amp;gt;bx_1 + (a \bmod b)y_1 = b x_1 + \left(a - \lfloor \frac{a}{b}\rfloor b\right)y_1 = &lt;br /&gt;
b\left(x_1 - \lfloor \frac{a}{b}\rfloor y_1\right) + a y_1&amp;lt;/tex&amp;gt;. Следовательно, приходим к расширенному алгоритму Евклида:&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Алгоритм возвращает тройку &amp;lt;tex&amp;gt;\gcd, x, y&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{extendedGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} == 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}, 0, 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd, x_1, y_1} \leftarrow \mathtt{extendedGcd(b, a} \bmod \mathtt{b)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{x} \leftarrow \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{y} \leftarrow \mathtt{x_1} - (\mathtt{a} \text{ div } \mathtt{b}) \cdot \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd, x, y}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Такое представление наибольшего общего делителя называется '''соотношением Безу''', а числа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;br /&gt;
==Источники информации==&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60386</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60386"/>
				<updated>2017-01-31T01:39:19Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Расширенный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается третий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД(это следует из утверждений [[#l3 | о НОДе четных и нечетных]] и [[#l2 | о НОДе нуля]]).&lt;br /&gt;
&lt;br /&gt;
Можно показать&amp;lt;ref&amp;gt;http://maths-people.anu.edu.au/~brent/pd/rpb183pr.pdf Twenty years' analysis of the Binary Euclidean Algorithm&amp;lt;/ref&amp;gt;, что этот алгоритм, в среднем на 60% более эффективен, чем классический. Но, к сожалению, в худшем случае он работает за &amp;lt;tex&amp;gt;O(\log^2\min(a, b))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
В стандартном алгоритме, мы использовали следующее свойство: &amp;lt;tex&amp;gt;\gcd(a, b) = \gcd(b, a \bmod b)&amp;lt;/tex&amp;gt;. Воспользуемся им для того, чтобы решить следующую задачу: найти &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;ax + by = \gcd(a, b)&amp;lt;/tex&amp;gt;. Пусть мы нашли пару &amp;lt;tex&amp;gt;x_1, y_1: \: bx_1 + (a \bmod b)y_1 = \gcd(a, b)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;a \bmod b = a - \lfloor \frac{a}{b}\rfloor b&amp;lt;/tex&amp;gt;. Получаем: &amp;lt;tex&amp;gt;bx_1 + (a \bmod b)y_1 = b x_1 + \left(a - \lfloor \frac{a}{b}\rfloor b\right)y_1 = &lt;br /&gt;
b\left(x_1 - \lfloor \frac{a}{b}\rfloor y_1\right) + a y_1&amp;lt;/tex&amp;gt;. Следовательно, приходим к расширенному алгоритму Евклида:&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Алгоритм возвращает тройку &amp;lt;tex&amp;gt;\gcd, x, y&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{extendedGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} == 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}, 0, 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd, x_1, y_1} \leftarrow \mathtt{extendedGcd(b, a} \bmod \mathtt{b)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{x} \leftarrow \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{y} \leftarrow \mathtt{x_1} - (\mathtt{a} \text{ div } \mathtt{b}) \cdot \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd, x, y}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Такое представление наибольшего общего делителя называется '''соотношением Безу''', а числа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60385</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60385"/>
				<updated>2017-01-31T01:38:26Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Расширенный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается третий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД(это следует из утверждений [[#l3 | о НОДе четных и нечетных]] и [[#l2 | о НОДе нуля]]).&lt;br /&gt;
&lt;br /&gt;
Можно показать&amp;lt;ref&amp;gt;http://maths-people.anu.edu.au/~brent/pd/rpb183pr.pdf Twenty years' analysis of the Binary Euclidean Algorithm&amp;lt;/ref&amp;gt;, что этот алгоритм, в среднем на 60% более эффективен, чем классический. Но, к сожалению, в худшем случае он работает за &amp;lt;tex&amp;gt;O(\log^2\min(a, b))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
В стандартном алгоритме, мы использовали следующее свойство: &amp;lt;tex&amp;gt;\gcd(a, b) = \gcd(b, a \bmod b)&amp;lt;/tex&amp;gt;. Воспользуемся им для того, чтобы решить следующую задачу: найти &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;ax + by = \gcd(a, b)&amp;lt;/tex&amp;gt;. Пусть мы нашли пару &amp;lt;tex&amp;gt;x_1, y_1: \: bx_1 + (a \bmod b)y_1 = \gcd(a, b)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;a \bmod b = a - \lfloor \frac{a}{b}\rfloor b&amp;lt;/tex&amp;gt;. Получаем: &amp;lt;tex&amp;gt;bx_1 + (a \bmod b)y_1 = b x_1 + \left(a - \lfloor \frac{a}{b}\rfloor b\right)y_1 = &lt;br /&gt;
b\left(x_1 - \lfloor \frac{a}{b}\rfloor y_1\right) + a y_1&amp;lt;/tex&amp;gt;. Следовательно, приходим к расширенному алгоритму Евклида:&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Алгоритм возвращает тройку &amp;lt;tex&amp;gt;\gcd, x, y&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{extendedGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} == 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}, 0, 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd, x_1, y_1} \leftarrow \mathtt{extendedGcd(b, a} \bmod \mathtt{b)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{x} \leftarrow \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{y} \leftarrow \mathtt{x_1} - (\mathtt{a} \text{ div } \mathtt{b}) \cdot \mathtt{y_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd, x, y}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Такое представление наибольшего общего делителя называется '''соотношением Безу''', а числа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с диофантовыми уравнениями ====&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60384</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60384"/>
				<updated>2017-01-31T00:51:43Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Двоичный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается третий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД(это следует из утверждений [[#l3 | о НОДе четных и нечетных]] и [[#l2 | о НОДе нуля]]).&lt;br /&gt;
&lt;br /&gt;
Можно показать&amp;lt;ref&amp;gt;http://maths-people.anu.edu.au/~brent/pd/rpb183pr.pdf Twenty years' analysis of the Binary Euclidean Algorithm&amp;lt;/ref&amp;gt;, что этот алгоритм, в среднем на 60% более эффективен, чем классический. Но, к сожалению, в худшем случае он работает за &amp;lt;tex&amp;gt;O(\log^2\min(a, b))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с диофантовыми уравнениями ====&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60383</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60383"/>
				<updated>2017-01-31T00:50:12Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Расширенный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается ретий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД(это следует из утверждений [[#l3 | о НОДе четных и нечетных]] и [[#l2 | о НОДе нуля]]).&lt;br /&gt;
&lt;br /&gt;
Можно показать&amp;lt;ref&amp;gt;http://maths-people.anu.edu.au/~brent/pd/rpb183pr.pdf Twenty years' analysis of the Binary Euclidean Algorithm&amp;lt;/ref&amp;gt;, что этот алгоритм, в среднем на 60% более эффективен, чем классический. Но, к сожалению, в худшем случае он работает за &amp;lt;tex&amp;gt;O(\log^2\min(a, b))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с диофантовыми уравнениями ====&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60382</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60382"/>
				<updated>2017-01-31T00:48:36Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Двоичный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается ретий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД(это следует из утверждений [[#l3 | о НОДе четных и нечетных]] и [[#l2 | о НОДе нуля]]).&lt;br /&gt;
&lt;br /&gt;
Можно показать&amp;lt;ref&amp;gt;http://maths-people.anu.edu.au/~brent/pd/rpb183pr.pdf Twenty years' analysis of the Binary Euclidean Algorithm&amp;lt;/ref&amp;gt;, что этот алгоритм, в среднем на 60% более эффективен, чем классический. Но, к сожалению, в худшем случае он работает за &amp;lt;tex&amp;gt;O(\log^2\min(a, b))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60381</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60381"/>
				<updated>2017-01-31T00:42:17Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Двоичный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается ретий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД(это следует из утверждений [[#l3 | о НОДе четных и нечетных]] и [[#l2 | о НОДе нуля]]).&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60380</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60380"/>
				<updated>2017-01-31T00:40:34Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Двоичный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается ретий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность данного алгоритма следует из того, что он на каждом шаге делает эквивалентные преобразования НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60379</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60379"/>
				<updated>2017-01-31T00:37:31Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Двоичный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l3&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b)}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; '''or''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;\mathtt{0}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// первые два случая&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b\: /\: 2)} \cdot 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else'''&lt;br /&gt;
             '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// второй случай, только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; поменяли местами&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{b} \bmod 2 = 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd(a, b\: /\: 2)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// остается ретий случай. На самом деле, мы можем оставлять справа и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;// поэтому давайте всегда оставлять меньшее&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\mathtt{a} &amp;gt; \mathtt{b}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((a - b)\: /\: 2, b)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{binaryGcd((b - a)\: /\: 2, a)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60378</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60378"/>
				<updated>2017-01-31T00:14:17Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Двоичный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a + 1, 2b + 1) = \gcd(\left|a - b\right|, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида (ниже будет дана рекурсивная реализация, для лучшей читаемости):&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60377</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60377"/>
				<updated>2017-01-31T00:03:27Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Двоичный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
Пользуясь этим, и утверждением [[#l2 | о НОДе нуля]], определим двоичный алгоритм Евклида:&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60376</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60376"/>
				<updated>2017-01-30T23:57:20Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Стандартный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60375</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60375"/>
				<updated>2017-01-30T23:55:51Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Двоичный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
Идея улучшения: давайте вместо долгого деления ограничимся вычитаниями и битовыми сдвигами.&lt;br /&gt;
&lt;br /&gt;
Для начала, опишем еще несколько свойств &amp;lt;tex&amp;gt;gcd&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа, тогда&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b) = 2\cdot\gcd(a, b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\gcd(2a, 2b + 1) = \gcd(a, 2b + 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Тривиальным образом следует из определения&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60374</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60374"/>
				<updated>2017-01-30T23:33:45Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Стандартный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
===Двоичный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60373</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60373"/>
				<updated>2017-01-30T23:33:09Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Алгоритм Вычисления */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Мы получили очень простой алгоритм, который считает НОД за логарифмическое время. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60372</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60372"/>
				<updated>2017-01-30T23:29:58Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Стандартный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \min (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60371</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60371"/>
				<updated>2017-01-30T23:28:25Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Наивный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает пересечение двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \max (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60370</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60370"/>
				<updated>2017-01-30T23:27:49Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Стандартный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает слияние двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \max (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
Таким образом, реализация стандартного алгоритма Евклида, достаточно проста:&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{euclideanGcd}(\mathtt{a, b}):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{b} \neq 0:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{b} \leftarrow \mathtt{a} \bmod \mathtt{b}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt;\mathtt{a} \leftarrow \mathtt{t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{a}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60369</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60369"/>
				<updated>2017-01-30T23:14:35Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства НОД==&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Связь с наименьшим общим кратным===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает слияние двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \max (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60368</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60368"/>
				<updated>2017-01-30T23:09:25Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Наивный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает слияние двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;. Асимптотика равна минимуму из длин массивов &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \max (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60367</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60367"/>
				<updated>2017-01-30T23:07:36Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Наивный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{t} \leftarrow \min(\alpha_i, \beta_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\mathtt{t}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Корректность алгоритма следует из того, что он по сути просто делает слияние двух упорядоченных массивов (&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;), только результат записывает не в массив, а агрегирует в переменной &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \max (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60366</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60366"/>
				<updated>2017-01-30T22:57:15Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Наивный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Вычисления==&lt;br /&gt;
&lt;br /&gt;
===Наивный алгоритм===&lt;br /&gt;
&lt;br /&gt;
В наивном методе, мы считаем, что нам известны разложения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на простые множители.&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} множество простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} степени простых чисел в разложении &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{naiveGcd}(p, q, \alpha, \beta):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{gcd} \leftarrow 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{i, j} \leftarrow 0, 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;\mathtt{i} &amp;lt; p\mathtt{.length()}&amp;lt;/tex&amp;gt; '''and''' &amp;lt;tex&amp;gt;\mathtt{j} &amp;lt; q\mathtt{.length()}:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''if''' &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{gcd} = \mathtt{gcd} \cdot p_i^{\alpha_i}&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else if''' &amp;lt;tex&amp;gt;p_i &amp;lt; q_j:&amp;lt;/tex&amp;gt;&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{i} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''else''':&lt;br /&gt;
             &amp;lt;tex&amp;gt;\mathtt{j} \mathrel{+}\mathrel{\mkern-2mu}= 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;\mathtt{gcd}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \max (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60365</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60365"/>
				<updated>2017-01-30T22:31:16Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Разложим &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; на множители: пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;a = p_1^{\alpha_1} \cdot p_2^{\alpha_2} \cdot \dotso \cdot p_k^{\alpha_k}, \: &lt;br /&gt;
b = q_1^{\beta_1} \cdot q_2^{\beta_2} \cdot \dotso \cdot q_k^{\beta_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_j, q_j&amp;lt;/tex&amp;gt; {{---}} простые, а &amp;lt;tex&amp;gt;\alpha_j, \beta_j&amp;lt;/tex&amp;gt; {{---}} натуральные&lt;br /&gt;
(такие разложения существуют, по [[Основная_теорема_арифметики | основной теореме арифметики]]). Без ограничения общности, можно считать, что &amp;lt;tex&amp;gt;p_j = q_j, k = n&amp;lt;/tex&amp;gt; (если это не так, сделаем соответствующие &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; равными нулю).&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Значит, такого &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&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;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \max (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60364</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60364"/>
				<updated>2017-01-30T22:11:44Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Стандартный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&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;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\gcd(a, b) = r_n&amp;lt;/tex&amp;gt; {{---}} последнему ненулевому члену этой последовательности.&lt;br /&gt;
}}&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \max (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60363</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60363"/>
				<updated>2017-01-30T22:05:51Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&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;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда НОД(''a'',''b''), наибольший общий делитель &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, равен&lt;br /&gt;
&amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt;, последнему ненулевому члену этой последовательности.&lt;br /&gt;
&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \max (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60362</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60362"/>
				<updated>2017-01-30T22:04:21Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Стандартный алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&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;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда НОД(''a'',''b''), наибольший общий делитель &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, равен&lt;br /&gt;
&amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt;, последнему ненулевому члену этой последовательности.&lt;br /&gt;
&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Далее, оценим асимптотику работы алгоритма.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Алгоритм Евклида работает за &amp;lt;tex&amp;gt;O(\log \max (a, b))&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
Доказательство этого факта&amp;lt;ref&amp;gt;[http://mathworld.wolfram.com/EuclideanAlgorithm.html Wolfram MathWorld {{---}} алгоритм Евклида]&amp;lt;/ref&amp;gt; достаточно громоздкое, поэтому не будем приводить его здесь.&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60361</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60361"/>
				<updated>2017-01-30T21:35:49Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&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;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда НОД(''a'',''b''), наибольший общий делитель &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, равен&lt;br /&gt;
&amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt;, последнему ненулевому члену этой последовательности.&lt;br /&gt;
&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60348</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60348"/>
				<updated>2017-01-30T17:06:37Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Связь с наименьшим общим кратным */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем нашу лемму.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Евклида==&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда НОД(''a'',''b''), наибольший общий делитель &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, равен&lt;br /&gt;
&amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt;, последнему ненулевому члену этой последовательности.&lt;br /&gt;
&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60347</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60347"/>
				<updated>2017-01-30T17:05:17Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необходимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем наше утверждение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Евклида==&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда НОД(''a'',''b''), наибольший общий делитель &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, равен&lt;br /&gt;
&amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt;, последнему ненулевому члену этой последовательности.&lt;br /&gt;
&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60346</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60346"/>
				<updated>2017-01-30T17:04:19Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Связь с наименьшим общим кратным */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необхолимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем наше утверждение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Евклида==&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда НОД(''a'',''b''), наибольший общий делитель &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, равен&lt;br /&gt;
&amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt;, последнему ненулевому члену этой последовательности.&lt;br /&gt;
&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60345</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60345"/>
				<updated>2017-01-30T17:03:42Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольшее натуральное &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необхолимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем наше утверждение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Евклида==&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда НОД(''a'',''b''), наибольший общий делитель &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, равен&lt;br /&gt;
&amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt;, последнему ненулевому члену этой последовательности.&lt;br /&gt;
&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60344</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60344"/>
				<updated>2017-01-30T16:59:23Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольший из их общих делителей. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Существует определение НОД через [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l001&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\gcd(a, b) = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\min(\alpha_1, \beta_1)}\cdot p_2^{\min(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\min(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt;. Проверим его максимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;gt; p&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; делятся на &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Тогда оно необхолимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \min(\alpha_j, \beta_j) &amp;lt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;gt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не окажется делителем &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через  [[Разложение_на_множители_(факторизация) | разложение числа на простые множители]]:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Доказательство полностью аналогично доказательству [[#l001 | утверждения о НОД]], с той лишь разницей, что мы заменяем &amp;lt;tex&amp;gt;\min&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\max&amp;lt;/tex&amp;gt;, а знаки неравенств {{---}} на противоположные.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем наше утверждение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Евклида==&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда НОД(''a'',''b''), наибольший общий делитель &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, равен&lt;br /&gt;
&amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt;, последнему ненулевому члену этой последовательности.&lt;br /&gt;
&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60343</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60343"/>
				<updated>2017-01-30T15:57:12Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Связь с наименьшим общим кратным */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольший из их общих делителей. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Связь с наименьшим общим кратным==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наименьшим общим кратным''' (англ. &amp;lt;tex&amp;gt;\text{lcm}&amp;lt;/tex&amp;gt; {{---}} ''least common multiple'') для двух чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; называется наименьшее натуральное число, которое делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; без остатка. Более формально &lt;br /&gt;
&amp;lt;tex&amp;gt;\text{lcm}(a, b) = \min \left\{ d \mid d \equiv 0 \left( \bmod a\right), d \equiv 0 \left( \bmod b\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Существует представление НОК через разложение числа на простые множители:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=l002&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; - натуральные числа. Тогда &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;\text{lcm}(a, b) = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что в таком случае &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;p = p_1^{\max(\alpha_1, \beta_1)}\cdot p_2^{\max(\alpha_2, \beta_2)} \cdot \dotso \cdot p_k^{\max(\alpha_k, \beta_k)} &amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и на &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Проверим его минимальность.&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt;q &amp;lt; p&amp;lt;/tex&amp;gt; {{---}} кратное &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Тогда оно необхолимо будет раскладываться на те же простые множители, что и &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex dpi=&amp;quot;140&amp;quot;&amp;gt;q = p_1^{\gamma_1}\cdot p_2^{\gamma_2} \cdot \dotso \cdot p_k^{\gamma_k} &amp;lt;/tex&amp;gt;. Значит, существует &amp;lt;tex&amp;gt;j \leqslant k : \max(\alpha_j, \beta_j) &amp;gt; \gamma_j&amp;lt;/tex&amp;gt;. Из этого следует, что либо &amp;lt;tex&amp;gt;\gamma_j &amp;lt; \alpha_j&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;\gamma_j &amp;lt; \beta_j&amp;lt;/tex&amp;gt;. Но в первом случае, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; окажется некратным &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;,&lt;br /&gt;
а во втором {{---}} &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель связан с наименьшим общим кратным следующим равенством:&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l01&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} целые числа. Тогда &amp;lt;tex&amp;gt;\gcd(a, b) \cdot \text{lcm}(a, b) = a \cdot b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
По [[#l001 | утверждению о НОД]] и [[#l002 | утверждению о НОК]], пользуясь тем, что &amp;lt;tex&amp;gt;\max(\alpha, \beta) + \min(\alpha, \beta) = \alpha + \beta&amp;lt;/tex&amp;gt;, получаем наше утверждение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Евклида==&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда НОД(''a'',''b''), наибольший общий делитель &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, равен&lt;br /&gt;
&amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt;, последнему ненулевому члену этой последовательности.&lt;br /&gt;
&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60342</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60342"/>
				<updated>2017-01-30T13:30:45Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольшим общим делителем''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольший из их общих делителей. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&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;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда НОД(''a'',''b''), наибольший общий делитель &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, равен&lt;br /&gt;
&amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt;, последнему ненулевому члену этой последовательности.&lt;br /&gt;
&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60341</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60341"/>
				<updated>2017-01-30T13:27:15Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Алгоритм Евклида */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольший из их общих делителей. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&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;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда НОД(''a'',''b''), наибольший общий делитель &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, равен&lt;br /&gt;
&amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt;, последнему ненулевому члену этой последовательности.&lt;br /&gt;
&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60340</id>
		<title>Наибольший общий делитель</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=60340"/>
				<updated>2017-01-30T13:25:31Z</updated>
		
		<summary type="html">&lt;p&gt;ArtemZholus: /* Наибольший общий делитель как максимальное число, делящее два данных числа */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' (англ. &amp;lt;tex&amp;gt;\gcd&amp;lt;/tex&amp;gt; {{---}} ''greatest common divisor'') для двух целых чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; называется наибольший из их общих делителей. Более формально, &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(a, b) =\max \left\{ d \mid a \equiv 0 \left(\bmod d\right), b \equiv 0 \left(\bmod d\right) \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не ноль.&lt;br /&gt;
&lt;br /&gt;
Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух целых чисел:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Наибольший общий делитель''' для целочисленного множества &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; определяется как &lt;br /&gt;
&amp;lt;tex&amp;gt;\gcd(A) = \max \left\{ d \mid \forall a_j \in A,\: a_j \equiv 0 \left(\bmod d \right)\right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм Евклида==&lt;br /&gt;
&lt;br /&gt;
===Стандартный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; — целые числа, не равные одновременно нулю, и последовательность чисел&lt;br /&gt;
: &amp;lt;tex&amp;gt; a,\, b,\,r_1 &amp;gt; r_2 &amp;gt; r_3 &amp;gt; r_4 &amp;gt; \cdots &amp;gt;r_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
определена тем, что каждое &amp;lt;tex&amp;gt;r_k&amp;lt;/tex&amp;gt; — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть&lt;br /&gt;
: &amp;lt;tex&amp;gt;a = bq_0 + r_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;b = r_1q_1 + r_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = r_2q_2 + r_3&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{k-2} = r_{k-1} q_{k-1} + r_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_{n-1} = r_n q_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда НОД(''a'',''b''), наибольший общий делитель &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, равен&lt;br /&gt;
&amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt;, последнему ненулевому члену этой последовательности.&lt;br /&gt;
&lt;br /&gt;
'''Существование''' таких &amp;lt;tex&amp;gt;r_1, r_2, ...&amp;lt;/tex&amp;gt;, то есть возможность деления с остатком &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; для любого целого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; и целого &amp;lt;tex&amp;gt;n\ne 0&amp;lt;/tex&amp;gt;, доказывается индукцией по ''m''.&lt;br /&gt;
&lt;br /&gt;
'''Корректность''' этого алгоритма вытекает из следующих двух утверждений:&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=l1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;a = bq + r&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\gcd (a,b) = \gcd (b,r).&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда &amp;lt;tex&amp;gt; a = t_1 k &amp;lt;/tex&amp;gt; ; &amp;lt;tex&amp;gt; b = t_2 k; &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; t_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; t_2 &amp;lt;/tex&amp;gt; — целые числа из определения.&lt;br /&gt;
# Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а &amp;lt;tex&amp;gt;r = a - bq = (t_1 - t_2 q)k &amp;lt;/tex&amp;gt; (выражение в скобках есть целое число, следовательно, k делит r без остатка)&lt;br /&gt;
# Обратное также верно и доказывается аналогично 2) - любой делитель b и r так же является делителем a и b.&lt;br /&gt;
# Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот.&lt;br /&gt;
# В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\gcd (0,r) = r&amp;lt;/tex&amp;gt; для любого ненулевого &amp;lt;tex&amp;gt;r.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Проще сформулировать алгоритм Евклида так: если даны натуральные числа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.&lt;br /&gt;
&lt;br /&gt;
===Расширенный алгоритм Евклида===&lt;br /&gt;
&lt;br /&gt;
Формулы для &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; могут быть переписаны следующим образом:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_1 = a + b(-q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\cdots&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;tex&amp;gt;\gcd (a,b) = r_n = as + bt&amp;lt;/tex&amp;gt;&lt;br /&gt;
здесь ''s'' и ''t'' целые. Это представление наибольшего общего делителя называется '''соотношением Безу''', а числа ''s'' и ''t'' — '''коэффициентами Безу'''. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.&lt;br /&gt;
&lt;br /&gt;
==== Связь с цепными дробями ====&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;a/b&amp;lt;/tex&amp;gt; допускает представление в виде цепной дроби:&lt;br /&gt;
: &amp;lt;tex&amp;gt;\frac ab=[q_0; q_1, q_2,\cdots,q_n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом цепная дробь без последнего члена равна отношению коэффициентов Безу &amp;lt;tex&amp;gt;t/s&amp;lt;/tex&amp;gt;, взятому со знаком минус:&lt;br /&gt;
: &amp;lt;tex&amp;gt;[q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Классы чисел]]&lt;/div&gt;</summary>
		<author><name>ArtemZholus</name></author>	</entry>

	</feed>