Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория чисел (расчётка).doc
Скачиваний:
92
Добавлен:
16.12.2018
Размер:
870.91 Кб
Скачать
    1. Алгоритм Евклида для нахождения наибольшего общего делителя

Целое число а делит без остатка другое целое число b, если и только если

b = k • a

для некоторого целого числа k. В этом случае а называют делителем числа b или множителем в разложении числа b на множители.

Пусть а – целое число, причем а > 1. Тогда а является простым числом, если его единственным положительным делителем будут 1 и само а. В противном случае а называется составным.

Любое целое n > 1 может быть представлено единственным образом с точностью до порядка сомножителей как произведение простых.

Существенный с точки зрения криптографии факт состоит в том, что не известно никакого эффективного алгоритма разложения чисел на множители. Не было получено и никакой нетривиальной нижней оценки временной сложности разложения. Никаких эффективных методов не известно даже в таком простом случае, когда необходимовосстановить два простых числа p и q из их произведения:

n = p • q.

Наибольший общий делитель чисел а и b, обозначаемый как НОД (а, b) или просто (а, b), это наибольшее целое, делящее одновременно числа а и b.

В эквивалентной форме (а, b) – это то единственное натуральное число, которое делит а и b и делится на любое целое, делящее и а и b.

Если НОД (а, b) = 1, то целые а и b – взаимно простые.

Наибольший общий делитель может быть вычислен с помощью алгоритма Евклида. Евклид описал этот алгоритм в своей книге “Начала”, написанной около 300 лет до н.э. Он не изобрел его. Историки полагают, что этот алгоритм, возможно, старше еще на 200 лет. Это древнейший нетривиальный алгоритм, который просуществовал до настоящего времени и все еще хорош и сегодня.

Опишем алгоритм Евклида для нахождения НОД (а, b).

Введем обозначения: q i – частное , r i – остаток.

Тогда алгоритм можно представить в виде следующей цепочки равенств:

а = b • q 1 + r 1, 0 < r 1 < b,

b = r 1 • q 2 + r 2, 0 < r 2 < r 1,

r1 = r 2 • q 3 + r 3, 0 < r 3 < r 2,

. .

. .

. .

r k - 2 = r k - 1 • q k + r k, 0 < r k < r k - 1,

r k - 1 = r k • q k + 1.

Остановка гарантируется, поскольку остатки r i от делений образуют строго убывающую последовательность натуральных чисел. Из этой цепочки немедленно получаем, что r k есть общий делитель чисел а и b и, более того, что любой общий делитель чисел а и b делит и r k. Таким образом, r k = НОД (а, b) или r k = (а, b).

Алгоритм 1.2.1 – Алгоритм Евклида для вычисления наибольшего общего делителя

begin

g 0 : = b;

g 1 : = a;

i : = 1

while g i ! = 0 do

begin

g i + 1 : = g i – 1 mod g i ;

i : = i + 1

end

gcd : = g i – 1 {gcd - результат}

end