Алгоритм Евклида
Пусть a и b — целые числа, не равные одновременно нулю, и последовательность чисел определена тем, что каждое rk — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело, то есть a = bq 0 + r 1 b = r 1 q 1 + r 2 r 1 = r 2 q 2 + r 3 rk − 2 = rk − 1 qk − 1 + rk rn − 1 = rnqn Тогда НОД(a, b), наибольший общий делитель a и b, равен rn, последнему ненулевому члену этой последовательности. Существование таких r 1, r 2,..., то есть возможность деления с остатком m на n для любого целого m и целого , доказывается индукцией по m. Корректность этого алгоритма вытекает из следующих двух утверждений:
Доказательство. Пусть k — любой общий делитель чисел a и b, не обязательно максимальный, тогда a = t1 * k; b = t2 * k; где t1 и t2 — целые числа из определения. Тогда k также общий делитель чисел b и r, так как b делится на k по определению, а r = a − bq = (t1 − t2 * q) * k (выражение в скобках есть целое число, следовательно, k делит r без остатка) Обратное также верно и доказывается аналогично пункту 2 - любой делитель b и r так же является делителем a и b. Следовательно, все общие делители пар чисел a,b и b,r совпадают. Другими словами, нет общего делителя у чисел a,b, который не был бы также делителем b,r, и наоборот. В частности, максимальный делитель остается тем же самым. Что и требовалось доказать.
Проще сформулировать алгоритм Евклида так: если даны натуральные числа a и b и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.
|