MAXimal
home
algo
bookz
forum
about
�������� �������
Page source on a
TeX
-like language:
\h1{�������� ������� ���������� ��� (����������� ������ ��������)} ���� ��� ����� ��������������� ����� $a$ � $b$. ��������� ����� �� ���������� ����� ��������, �.�. ���������� �����, ������� �������� ��������� ������������ � $a$, � $b$. �� ���������� ����� "���������� ����� ��������" ������� "greatest common divisor", � ���������������� ��� ������������ �������� ${\rm gcd}$: $$ {\rm gcd}(a,b) = \max_{k=1 \ldots \infty \ :\ k|a \ \&\ k|b} k $$ (����� �������� "$|$" ���������� ���������, �.�. "$k|a$" ���������� "$k$ ����� $a$") ����� ��� �� ����� ����� ����, � ������ ������� �� ����, �� ���������� ����� ���������, �������� �����������, ����� ��� ������ �����. ����� ��� ����� ����� ����, ��������� �� �������� (������� ����� ���������� ������� �����), �� ������� � ���� ������ ���������� ����� �������� ������ ����. ������� ����� �������� � ����� �������: ���� ���� �� ����� ����� ����, �� �� ���������� ����� �������� ����� ������� �����. \bf{�������� �������}, ������������� ����, ������ ������ ���������� ����������� ������ �������� ���� ����� $a$ � $b$ �� $O (\log \min(a,b))$. ������ �������� ��� ������� ������ � ����� ������� "������" (����� 300 �. �� �.�.), ����, ������ ��������, ���� �������� ����� ����� ������ �������������. \h2{��������} ��� �������� ����������� ����� � ����������� ��������� ��������: $$ {\rm gcd}(a,b) = \cases{ a, & {\rm if} b=0 \cr {\rm gcd} (b, a\ {\rm mod}\ b), & {\rm otherwise} } $$ \h2{����������} \code int gcd (int a, int b) { if (b == 0) return a; else return gcd (b, a % b); } \endcode ��������� ��������� �������� �������� C++, �������� ����� �������� ��� ������: \code int gcd (int a, int b) { return b ? gcd (b, a % b) : a; } \endcode �������, ������� � ������������� ����� ���������: \code int gcd (int a, int b) { while (b) { a %= b; swap (a, b); } return a; } \endcode \h2{�������������� ������������} ������� �������, ��� ��� ������ �������� ��������� ������� ��� ������ �������� ������ �������, �������������, ��������� �� ���������������, �� �������� ������� \bf{������ �����������}. ��� \bf{�������������� ������������} ��� ���������� ��������, ��� ${\rm gcd}(a,b) = {\rm gcd} (b, a\ {\rm mod}\ b)$ ��� ����� $a \ge 0, b > 0$. �������, ��� ��������, ������� � ����� ����� ���������, ������� �� ��������� � ������, � ������� � ������ --- ������� �� ������� � �����. ��������, ��� ����� ��������, ��� ����� � ������ ����� ���������, ��� � ������� ������������ ��������� �������. ��������� $d = {\rm gcd}(a,b)$. �����, �� �����������, $d|a$ � $d|b$. �����, �������� ������� �� ������� $a$ �� $b$ ����� �� �������: $$ a\ {\rm mod}\ b = a - b \left\lfloor \frac{a}{b} \right\rfloor $$ �� ����� ������ �������: $$ d\ |\ (a\ {\rm mod}\ b) $$ ����, ��������� ����������� $d|b$, �������� �������: $$ \cases{ d\ |\ b, \cr d\ |\ (a\ {\rm mod}\ b) } $$ ������������� ������ ��������� ������� ������: ���� ��� �����-�� ��� ����� $p,q,r$ ���������: $p|q$ � $p|r$, �� ����������� �: $p\ |\ {\rm gcd}(q,r)$. � ����� �������� ��������: $$ d\ |\ {\rm gcd}(b, a\ {\rm mod}\ b) $$ ���, ���������� ������ $d$ ��� ����������� ��� ${\rm gcd}(a,b)$, ��������: $$ {\rm gcd}(a,b)\ |\ {\rm gcd}(b, a\ {\rm mod}\ b) $$ ����, �� ������� �������� ��������������: ��������, ��� ����� ����� ����� ������. ������ �������� �������������� ������������ ����������. \h2{����� ������} ����� ������ ��������� ����������� \bf{�������� ����}, ������� ������������� ������������ ����� ��������� ������� � ������������������ ���������: ���� $a > b \ge 1$ � $b < F_n$ ��� ���������� $n$, �� �������� ������� �������� �� ����� $n-2$ ����������� �������. ����� ����, ����� ��������, ��� ������� ������� ���� ������� --- �����������. ��� $a = F_n, b = F_{n-1}$ ����� ��������� ������ $n-2$ ����������� ������. ����� �������, \bf{���������������� ����� ��������� --- ��������� ������� ������} ��� ��������� �������. ��������, ��� ����� ��������� ������ ��������������� (��� ��������� � ������� $n$), ��������, ��� �������� ������� ����������� �� $O(\log \min(a,b))$ �������� ���������. \h2{��� (���������� ����� �������)} ���������� ����������� ������ �������� (least common multiplier, lcm) �������� � ���������� $\rm gcd$ ��������� ������� ������������: $$ {\rm lcm}(a,b) = \frac{ a \cdot b }{ {\rm gcd}(a,b) } $$ ����� �������, ���������� ��� ����� ����� ������� � ������� ��������� �������, � ��� �� ������������: \code int lcm (int a, int b) { return a / gcd (a, b) * b; } \endcode (����� ������� ������� �������� �� $\rm gcd$, � ������ ����� ��������� �� $b$, ��������� ��� ������� �������� ������������ � ��������� �������) \h2{����������} \ul{ \li \book{����� ������, ������ ���������, ������� ������, �������� �����}{���������: ���������� � ������}{2005}{cormen.djvu} }