- •Модульная арифметика, основные свойства.
- •2. Понятие простого числа, алгоритмы нахождения. Решето Эратосфена
- •Решето Сундарама
- •Решето Аткина
- •Нод, нок, Расширенный алгоритм Эвклида. Доказательство.
- •4. Функция Эйлера
- •Свойства
- •Вычисление функции Эйлера
- •Свойства
- •5. Битовые операции
- •Побитовое отрицание (not)
- •Побитовое и (and)
- •Побитовое или (or)
- •6. Асимптотический анализ алгоритмов, способы оценки алгоритмов.
- •7. Длинная арифметика
Решето Сундарама
Из ряда натуральных чисел от 1 до N исключаются все числа вида
где
индексы
пробегают
все натуральные значения, для которых
,
а
именно значения
и
Затем каждое из оставшихся чисел умножается на 2 и увеличивается на 1. Полученная в результате последовательность представляет собой все нечётные простые числа в отрезке [1,2N+1].
Решето Аткина
В математике решето́ А́ткина — быстрый современный алгоритм нахождения всех простых чисел до заданного целого числа N. Основная идея алгоритма состоит в использовании неприводимых квадратичных форм (представление чисел в виде ax²+by²). Предыдущие алгоритмы в основном представляли собой различные модификации решета Эратосфена, где использовалось представление чисел в виде редуцированных форм (обычно произведения xy). Отдельный этап алгоритма вычеркивает числа, кратные квадратам простых чисел.
Нод, нок, Расширенный алгоритм Эвклида. Доказательство.
Наибольшим общим делителем (НОД) для двух целых чисел m и n называется наибольший из их общих делителей. Пример: для чисел 70 и 105 наибольший общий делитель равен 35.
Наибольший общий делитель существует и однозначно определён, если хотя бы одно из чисел m или n не ноль.
Возможные обозначения наибольшего общего делителя чисел m и n:
НОД(m, n)
(m, n)
gcd(m, n) (от англ. Greatest Common Divisor)
Наименьшее
общее кратное (НОК)
двух целых
чисел m и n —
это наименьшее натуральное
число,
которое делится на m и n.
Обозначается НОК(m,n)
или
.
НОК для ненулевых чисел m, n всегда существует и связан с НОД следующим соотношением:
Это
частный случай более общей теоремы:
если
—
ненулевые числа, D —
какое-либо их общее кратное, то имеет
место формула:
Вариант 2: Определение 1.1. Наибольшим общим делителем (далее НОД) двух целых чисел a и b, одновременно не равных нулю, называется такое наибольшее целое число d, на которое a и b делятся без остатка. Этот факт обозначается так:d = НОД(a, b). Если оба числа равны нулю, то положим НОД(0, 0) = 0.
Исходя из определения, имеют место следующие равенства:
НОД(a, b) = НОД(b, a),
НОД(a, b) = НОД(-a, b)
НОД(a, 0) = |a|
Определение 1.2. Наименьшим общим кратным (далее НОК) двух целых чисел a и b называется наименьшее общее положительное целое число, кратное как a так и b.
алгоритм Евклида
Если НОД(a, b) = d, то a и b делятся на d. Следовательно их разница a – bтакже делится на d. Имеет место следующее рекурсивное соотношение для вычисления НОД.
НОД(a, b)
=
Пусть
и
—
целые числа, не равные одновременно
нулю, и последовательность чисел
определена
тем, что каждое
—
это остаток от деления предпредыдущего
числа на предыдущее, а предпоследнее
делится на последнее нацело, то есть
Тогда
НОД(a,b),
наибольший общий делитель
и
,
равен
,
последнему ненулевому члену этой
последовательности.
Существование таких
,
то есть возможность деления с
остатком
на
для
любого целого
и
целого
,
доказывается индукцией по m.
Доказательство
НОД(0,
)
=
для
любого ненулевого
(т.к.
0 делится на любое целое число, кроме
нуля).
Проще сформулировать алгоритм Евклида так: если даны натуральные числа и и, пока получается положительное число, по очереди вычитать из большего меньшее, то в результате получится НОД.
Для доказательства
корректности нам
необходимо показать, что
для
любых
.
Покажем, что величина, стоящая в левой части равенства, делится на настоящую в правой, а стоящая в правой — делится на стоящую в левой. Очевидно, это будет означать, что левая и правая части совпадают, что и докажет корректность алгоритма Евклида.
Обозначим
.
Тогда, по определению,
и
.
Далее,
разложим остаток от деления
на
через
их частное:
Но тогда отсюда следует:
Итак, вспоминая утверждение , получаем систему:
Воспользуемся
теперь следующим простым фактом: если
для каких-то трёх чисел
выполнено:
и
,
то выполняется и:
.
В нашей ситуации получаем:
Или,
подставляя вместо
его
определение как
,
получаем:
Итак, мы провели половину доказательства: показали, что левая часть делит правую. Вторая половина доказательства производится аналогично.
