Метод умножения Шёнхаге — Штрассена

Материал из Модулярная арифметики
(Различия между версиями)
Перейти к: навигация, поиск
Строка 19: Строка 19:
 
** len2 = 33
 
** len2 = 33
 
это умножение можно делать аппаратно, не углубляюсь в рекурсию.
 
это умножение можно делать аппаратно, не углубляюсь в рекурсию.
 +
 +
=== Исходники ===
 +
[http://www.ginac.de/CLN/cln.git/?p=cln.git;a=blob;f=src/base/digitseq/cl_DS_mul_fftm.h;h=a984802ce039e8179a26fda2681a2e133dba6fbd;hb=refs/heads/master CLN - Class Library for Numbers]

Версия 08:20, 29 июля 2013

Основные подробности

Пример

Положим задано два числа: X и Y, каждое длиной 512 бит. Требуется найти значение RES = (X*Y) mod 2N+1

  • Этап 1. Основные параметры алгоритма:
    • len1 = 512
    • len2 = 512
    • N = 1024
    • 2k ~ sqrt(N) = 32, k = 5
    • n >= 2*N/2k+k = (2048/32)+5 = 69. Поскольку n должно делиться на 2k, то можно выбрать n = 128.
  • Этап 2 (возникает на умножении DFT(X)*DFT(Y) mod 2128+1):
    • len1 = 129
    • len2 = 129
    • N = 128
    • 2k ~ (sqrt(N) = 11.3). Выберем k = 4.
    • n >= 2*N/2k+k = (256/16)+4 = 20. Поскольку n должно делиться на 2k, то можно выбрать n = 32.
  • Этап 3 (возникает на умножении DFT(X)*DFT(Y) mod 232+1):
    • len1 = 33
    • len2 = 33

это умножение можно делать аппаратно, не углубляюсь в рекурсию.

Исходники

CLN - Class Library for Numbers


Персональные инструменты
Пространства имён

Варианты
Действия
Навигация