25
Алгебра и теория чисел Иван Казменко Кружок обучения мастерству программирования при мат-мехе СПбГУ Четверг, 4 октября 2012 года Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 1/6

Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Алгебра и теория чисел

Иван Казменко

Кружок обучения мастерству программирования при мат-мехе СПбГУ

Четверг, 4 октября 2012 года

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 1 / 6

Page 2: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Оглавление

1 Вычисления по модулюРабота с остатками по модулю«Медленное» умножение«Быстрое» возведение в степень

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 2 / 6

Page 3: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю Работа с остатками по модулю

Работа с остатками по модулю

Постановка задачи: нужно производить арифметические действия надцелыми числами по модулю m.

Лемма 1: (a± b) mod m = ((a mod m)± (b mod m)) mod m.Лемма 2: (a · b) mod m = ((a mod m) · (b mod m)) mod m.Для деления такое равенство неверно.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 3 / 6

Page 4: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю Работа с остатками по модулю

Работа с остатками по модулю

Постановка задачи: нужно производить арифметические действия надцелыми числами по модулю m.

Лемма 1: (a± b) mod m = ((a mod m)± (b mod m)) mod m.Лемма 2: (a · b) mod m = ((a mod m) · (b mod m)) mod m.Для деления такое равенство неверно.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 3 / 6

Page 5: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю Работа с остатками по модулю

Работа с остатками по модулю

Постановка задачи: нужно производить арифметические действия надцелыми числами по модулю m.

Лемма 1: (a± b) mod m = ((a mod m)± (b mod m)) mod m.Лемма 2: (a · b) mod m = ((a mod m) · (b mod m)) mod m.Для деления такое равенство неверно.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 3 / 6

Page 6: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю Работа с остатками по модулю

Работа с остатками по модулю

Постановка задачи: нужно производить арифметические действия надцелыми числами по модулю m.

Лемма 1: (a± b) mod m = ((a mod m)± (b mod m)) mod m.Лемма 2: (a · b) mod m = ((a mod m) · (b mod m)) mod m.Для деления такое равенство неверно.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 3 / 6

Page 7: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Медленное» умножение

«Медленное» умножение

Постановка задачи: вычисление (a · b) mod m.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 4 / 6

Page 8: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Медленное» умножение

«Медленное» умножение

Постановка задачи: вычисление (a · b) mod m.Если числа порядка m2 помещаются в тип данных, можно простоприменить Лемму 1: (a · b) mod m = ((a mod m) · (b mod m)) mod m.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 4 / 6

Page 9: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Медленное» умножение

«Медленное» умножение

Постановка задачи: вычисление (a · b) mod m.Если же число m2 слишком велико, можно произвести умножение«в столбик» в двоичной записи:

Вычислим a mod m, 2a mod m, 4a mod m, 8a mod m, . . ..Рассмотрим двоичную запись b и просуммируем нужныеслагаемые с предыдущего шага, после каждого сложениявычисляя остаток по модулю m.Пример: a = 13, b = 10, m = 21.b = 1010 = 10102 = 2+ 8(1 · a) mod m = 13(2 · a) mod m = (13+ 13) mod 21 = 26 mod 21 = 5(4 · a) mod m = (5+ 5) mod 21 = 10(8 · a) mod m = (10+ 10) mod 21 = 20Ответ: (((2 · a) mod m) + ((8 · a) mod m)) mod m =(5+ 20) mod m = 25 mod 21 = 4.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 4 / 6

Page 10: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Медленное» умножение

«Медленное» умножение

Постановка задачи: вычисление (a · b) mod m.Если же число m2 слишком велико, можно произвести умножение«в столбик» в двоичной записи:

Вычислим a mod m, 2a mod m, 4a mod m, 8a mod m, . . ..Рассмотрим двоичную запись b и просуммируем нужныеслагаемые с предыдущего шага, после каждого сложениявычисляя остаток по модулю m.Пример: a = 13, b = 10, m = 21.b = 1010 = 10102 = 2+ 8(1 · a) mod m = 13(2 · a) mod m = (13+ 13) mod 21 = 26 mod 21 = 5(4 · a) mod m = (5+ 5) mod 21 = 10(8 · a) mod m = (10+ 10) mod 21 = 20Ответ: (((2 · a) mod m) + ((8 · a) mod m)) mod m =(5+ 20) mod m = 25 mod 21 = 4.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 4 / 6

Page 11: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Медленное» умножение

«Медленное» умножение

Постановка задачи: вычисление (a · b) mod m.Если же число m2 слишком велико, можно произвести умножение«в столбик» в двоичной записи:

Вычислим a mod m, 2a mod m, 4a mod m, 8a mod m, . . ..Рассмотрим двоичную запись b и просуммируем нужныеслагаемые с предыдущего шага, после каждого сложениявычисляя остаток по модулю m.Пример: a = 13, b = 10, m = 21.b = 1010 = 10102 = 2+ 8(1 · a) mod m = 13(2 · a) mod m = (13+ 13) mod 21 = 26 mod 21 = 5(4 · a) mod m = (5+ 5) mod 21 = 10(8 · a) mod m = (10+ 10) mod 21 = 20Ответ: (((2 · a) mod m) + ((8 · a) mod m)) mod m =(5+ 20) mod m = 25 mod 21 = 4.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 4 / 6

Page 12: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Медленное» умножение

«Медленное» умножение

Постановка задачи: вычисление (a · b) mod m.Если же число m2 слишком велико, можно произвести умножение«в столбик» в двоичной записи:

Вычислим a mod m, 2a mod m, 4a mod m, 8a mod m, . . ..Рассмотрим двоичную запись b и просуммируем нужныеслагаемые с предыдущего шага, после каждого сложениявычисляя остаток по модулю m.Пример: a = 13, b = 10, m = 21.b = 1010 = 10102 = 2+ 8(1 · a) mod m = 13(2 · a) mod m = (13+ 13) mod 21 = 26 mod 21 = 5(4 · a) mod m = (5+ 5) mod 21 = 10(8 · a) mod m = (10+ 10) mod 21 = 20Ответ: (((2 · a) mod m) + ((8 · a) mod m)) mod m =(5+ 20) mod m = 25 mod 21 = 4.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 4 / 6

Page 13: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Медленное» умножение

«Медленное» умножение

Постановка задачи: вычисление (a · b) mod m.Если же число m2 слишком велико, можно произвести умножение«в столбик» в двоичной записи:

Пример: a = 13, b = 10, m = 21.b = 1010 = 10102 = 2+ 8(1 · a) mod m = 13(2 · a) mod m = (13+ 13) mod 21 = 26 mod 21 = 5(4 · a) mod m = (5+ 5) mod 21 = 10(8 · a) mod m = (10+ 10) mod 21 = 20Ответ: (((2 · a) mod m) + ((8 · a) mod m)) mod m =(5+ 20) mod m = 25 mod 21 = 4.Проверка: (13 · 10) mod 21 = 130 mod 21 = (126+ 4) mod 21 = 4.Заметим, что при вычислениях могут получиться только числа от0 до 2 ·m − 2.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 4 / 6

Page 14: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Медленное» умножение

«Медленное» умножение

Постановка задачи: вычисление (a · b) mod m.Если же число m2 слишком велико, можно произвести умножение«в столбик» в двоичной записи:

Пример: a = 13, b = 10, m = 21.b = 1010 = 10102 = 2+ 8(1 · a) mod m = 13(2 · a) mod m = (13+ 13) mod 21 = 26 mod 21 = 5(4 · a) mod m = (5+ 5) mod 21 = 10(8 · a) mod m = (10+ 10) mod 21 = 20Ответ: (((2 · a) mod m) + ((8 · a) mod m)) mod m =(5+ 20) mod m = 25 mod 21 = 4.Проверка: (13 · 10) mod 21 = 130 mod 21 = (126+ 4) mod 21 = 4.Заметим, что при вычислениях могут получиться только числа от0 до 2 ·m − 2.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 4 / 6

Page 15: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Медленное» умножение

«Медленное» умножение

Постановка задачи: вычисление (a · b) mod m.Если же число m2 слишком велико, можно произвести умножение«в столбик» в двоичной записи:

Вычислим a mod m, 2a mod m, 4a mod m, 8a mod m, . . ..Рассмотрим двоичную запись b и просуммируем нужныеслагаемые с предыдущего шага, после каждого сложениявычисляя остаток по модулю m.Время работы: log2 b сложений по модулю для вычисления(2k · a) mod m и не более log2 b сложений по модулю длясуммирования нужных слагаемых.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 4 / 6

Page 16: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Быстрое» возведение в степень

«Быстрое» возведение в степень

Постановка задачи: вычисление ab mod m.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 5 / 6

Page 17: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Быстрое» возведение в степень

«Быстрое» возведение в степень

Постановка задачи: вычисление ab mod m.Будем действовать аналогично: умножение можно представить какпоследовательность сложений, а возведение в степень — какпоследовательность умножений.

Вычислим a mod m, a2 mod m, a4 mod m, a8 mod m, . . ..Рассмотрим двоичную запись b и вычислим произведение нужныхмножителей с предыдущего шага, после каждого умножениявычисляя остаток по модулю m.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 5 / 6

Page 18: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Быстрое» возведение в степень

«Быстрое» возведение в степень

Постановка задачи: вычисление ab mod m.Будем действовать аналогично: умножение можно представить какпоследовательность сложений, а возведение в степень — какпоследовательность умножений.

Вычислим a mod m, a2 mod m, a4 mod m, a8 mod m, . . ..Рассмотрим двоичную запись b и вычислим произведение нужныхмножителей с предыдущего шага, после каждого умножениявычисляя остаток по модулю m.Пример: a = 13, b = 5, m = 21.b = 510 = 1012 = 1+ 4a1 mod m = 13a2 mod m = (13 · 13) mod 21 = 169 mod 21 = 1a4 mod m = (1 · 1) mod 21 = 1Ответ: ((a1 mod m) · (a4 mod m)) mod m = (13 · 1) mod m = 13.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 5 / 6

Page 19: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Быстрое» возведение в степень

«Быстрое» возведение в степень

Постановка задачи: вычисление ab mod m.Будем действовать аналогично: умножение можно представить какпоследовательность сложений, а возведение в степень — какпоследовательность умножений.

Вычислим a mod m, a2 mod m, a4 mod m, a8 mod m, . . ..Рассмотрим двоичную запись b и вычислим произведение нужныхмножителей с предыдущего шага, после каждого умножениявычисляя остаток по модулю m.Пример: a = 13, b = 5, m = 21.b = 510 = 1012 = 1+ 4a1 mod m = 13a2 mod m = (13 · 13) mod 21 = 169 mod 21 = 1a4 mod m = (1 · 1) mod 21 = 1Ответ: ((a1 mod m) · (a4 mod m)) mod m = (13 · 1) mod m = 13.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 5 / 6

Page 20: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Быстрое» возведение в степень

«Быстрое» возведение в степень

Постановка задачи: вычисление ab mod m.Будем действовать аналогично: умножение можно представить какпоследовательность сложений, а возведение в степень — какпоследовательность умножений.

Вычислим a mod m, a2 mod m, a4 mod m, a8 mod m, . . ..Рассмотрим двоичную запись b и вычислим произведение нужныхмножителей с предыдущего шага, после каждого умножениявычисляя остаток по модулю m.Пример: a = 13, b = 5, m = 21.b = 510 = 1012 = 1+ 4a1 mod m = 13a2 mod m = (13 · 13) mod 21 = 169 mod 21 = 1a4 mod m = (1 · 1) mod 21 = 1Ответ: ((a1 mod m) · (a4 mod m)) mod m = (13 · 1) mod m = 13.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 5 / 6

Page 21: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Быстрое» возведение в степень

«Быстрое» возведение в степень

Постановка задачи: вычисление ab mod m.Будем действовать аналогично: умножение можно представить какпоследовательность сложений, а возведение в степень — какпоследовательность умножений.

Пример: a = 13, b = 5, m = 21.b = 510 = 1012 = 1+ 4a1 mod m = 13a2 mod m = (13 · 13) mod 21 = 169 mod 21 = 1a4 mod m = (1 · 1) mod 21 = 1Ответ: ((a1 mod m) · (a4 mod m)) mod m = (13 · 1) mod m = 13.Проверка: (135) mod 21 = 371 293 mod 21 = 13.Заметим, что при вычислениях могут получиться только числа от0 до (m − 1)2.Если умножения по модулю реализовать при помощи«медленного» умножения, при вычислениях могут вновьполучиться только числа от 0 до 2 ·m − 2.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 5 / 6

Page 22: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Быстрое» возведение в степень

«Быстрое» возведение в степень

Постановка задачи: вычисление ab mod m.Будем действовать аналогично: умножение можно представить какпоследовательность сложений, а возведение в степень — какпоследовательность умножений.

Пример: a = 13, b = 5, m = 21.b = 510 = 1012 = 1+ 4a1 mod m = 13a2 mod m = (13 · 13) mod 21 = 169 mod 21 = 1a4 mod m = (1 · 1) mod 21 = 1Ответ: ((a1 mod m) · (a4 mod m)) mod m = (13 · 1) mod m = 13.Проверка: (135) mod 21 = 371 293 mod 21 = 13.Заметим, что при вычислениях могут получиться только числа от0 до (m − 1)2.Если умножения по модулю реализовать при помощи«медленного» умножения, при вычислениях могут вновьполучиться только числа от 0 до 2 ·m − 2.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 5 / 6

Page 23: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Быстрое» возведение в степень

«Быстрое» возведение в степень

Постановка задачи: вычисление ab mod m.Будем действовать аналогично: умножение можно представить какпоследовательность сложений, а возведение в степень — какпоследовательность умножений.

Пример: a = 13, b = 5, m = 21.b = 510 = 1012 = 1+ 4a1 mod m = 13a2 mod m = (13 · 13) mod 21 = 169 mod 21 = 1a4 mod m = (1 · 1) mod 21 = 1Ответ: ((a1 mod m) · (a4 mod m)) mod m = (13 · 1) mod m = 13.Проверка: (135) mod 21 = 371 293 mod 21 = 13.Заметим, что при вычислениях могут получиться только числа от0 до (m − 1)2.Если умножения по модулю реализовать при помощи«медленного» умножения, при вычислениях могут вновьполучиться только числа от 0 до 2 ·m − 2.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 5 / 6

Page 24: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Быстрое» возведение в степень

«Быстрое» возведение в степень

Постановка задачи: вычисление ab mod m.Будем действовать аналогично: умножение можно представить какпоследовательность сложений, а возведение в степень — какпоследовательность умножений.

Вычислим a mod m, a2 mod m, a4 mod m, a8 mod m, . . ..Рассмотрим двоичную запись b и вычислим произведение нужныхмножителей с предыдущего шага, после каждого умножениявычисляя остаток по модулю m.Время работы: log2 b умножений по модулю для вычисленияa2k mod m и не более log2 b умножений по модулю дляперемножения нужных сомножителей.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 5 / 6

Page 25: Алгебра и теория чисел - spbu.ruacm.math.spbu.ru/~gassa/slides/modular-arithmetic.ru.pdfАлгебра и теория чисел ИванКазменко Кружок

Вычисления по модулю «Быстрое» возведение в степень

Всё.

Иван Казменко (Кружок при СПбГУ) Алгебра и теория чисел 04.10.2012 6 / 6