Алгоритм Полларда — Штрассена однозначно находит разложение числа
на два множителя за
арифметических операций. Сравним по скорости с методом квадратичных форм Шенкса, но, в отличие от него, требует выделение большого объёма памяти. Используется для ускорения вычислений второго этапа метода факторизации с помощью эллиптических кривых.[1] Алгоритм основан на следующей теореме.
Теорема
Пусть
. Тогда для любого натурального числа t наименьший простой делитель числа НОД(t, y!) может быть найден за
арифметических операций.
Доказательство теоремы сводится к возможности представить факториал произведением значений многочлена
в
точках,
. Для нахождения
значений многочлена быстрее, чем
, используется алгоритм быстрого умножения вектора на матрицу Вандермонда.[2]
Быстрое умножение вектора на матрицу Вандермонда
Быстрое умножение вектора
на матрицу Вандермонда эквивалентно нахождению
значений
многочлена
. Метод быстрого нахождения
значений многочлена строится на том факте, что
. Используя алгоритм быстрого умножения многочленов (а так же его модификацию операцию взятия по модулю многочлена), такой как Метод умножения Шёнхаге — Штрассена, применив парадигму разделяй и властвуй, за
умножений многочленов (и операций по модулю многочленов) строится дерево, листьями которого будут многочлены (значения)
, а корнем дерева будет многочлен
.[3]
Пример
Пусть надо найти делитель числа
. Для этого нам нужно найти
. При прямом вычислении 16! mod 247 потребуется 15 раз умножить числа и взять их модуль, что сопоставимо с прямым перебором всех возможных делителей. Однако на больших числах количество операций можно уменьшить как квадратный корень, используя алгоритм быстрого нахождения
значений многочлена. Действительно, рассмотрим многочлен
, тогда
. Степень многочлена
равна
. Теперь покажем как за
операций умножения и взятия по модулю многочленов мы сможем вычислить значения многочлена в
точках 1, 5, 9 и 13. Для этого выполним
шагов и построим дерево:
I)
II)
III)
Все вычисления полиномов производятся с помощью алгоритмов быстрого умножения полиномов в кольце вычетов
. Последним шагом находим
.
Алгоритм
Положим
. Далее с помощью алгоритма теоремы 1 найдем наименьший простой делитель числа НОД(n, y!). Поскольку y! делится на наименьший простой делитель p числа n (так как
), то алгоритм выдаст именно это число p.
Сложность алгоритма Полларда — Штрассена
.
Литература
Примечания