Метод квадратичных форм Шенкса

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Метод квадратичных форм Шенкса — метод факторизации целых чисел, основанный на применении квадратичных форм, разработанный Даниелем Шенксом (англ. Daniel Shanks).[1] в 1975 году, как развитие метода факторизации Ферма.

Для 32-разрядных компьютеров алгоритмы, основанные на данном методе, являются безусловными лидерами среди алгоритмов факторизации для чисел от 10^{10} до 10^{18} и, вероятно, таковыми останутся.[2] Данный алгоритм может разделить практически любое составное 18-значное число менее чем за миллисекунду. Алгоритм является чрезвычайно простым, красивым и эффективным. Кроме того, методы, базирующиеся на данном алгоритме, используются как вспомогательные при разложении делителей больших чисел типа чисел Ферма.

История[править | править исходный текст]

Другое название алгоритма - SQUFOF (акроним от английского - SQUare FOrm Factorization), что означает факторизация методом квадратичных форм. Данный подход был достаточно успешным на протяжении многих лет и, как следствие, довольно много различных модификаций и реализаций можно найти на эту тему в литературе.[3] Большинство методов являются сложными и запутанными, особенно в том случае, когда необходима реализация метода на компьютере. В результате чего, многие варианты алгоритмов не пригодны для реализации. Однако в 1975 году Даниель Шенкс предложил создать алгоритм, который можно реализовать и использовать не только на компьютере, но и на простом мобильном телефоне.

Хотя Шенкс описал другие алгоритмы для факторизации целых чисел, по SQUFOF он ничего не опубликовал. Он предоставил лекции по данной теме и объяснил основную суть своего метода довольно небольшому кругу людей. Некоторые работы других ученых [4][3][5][6] обсуждали алгоритм, но ни одна не содержит подробный анализ. Также интересно то, что в своем методе Шенкс делает довольно большое количество предположений [7], которые, к сожалению, остались без доказательства. В работе[8] представлены результаты некоторых экспериментов, которые свидетельствуют, что многие предположения имеют место быть. В итоге, основываясь на этих упрощающих предположениях, Шенксу удалось создать SQUFOF.

Вспомогательные определения[править | править исходный текст]

Для того чтобы понять, как реализован этот алгоритм, необходимо узнать минимальные сведения о математических объектах, используемых в данном методе, а именно о квадратичных формах. Бинарной квадратичной формой называется полином от двух переменных x и y:

f(x,y)=ax^2+bxy+cy^2=\begin{pmatrix} x & y \end{pmatrix}\begin{pmatrix} a & b \\ 0 & c \end{pmatrix}\begin{pmatrix} x \\ y\end{pmatrix}.

В методе Шенкса используются только неопределенные формы. Под  \Delta будем понимать дискриминант квадратичной формы. Будем говорить, что квадратичная форма f представляет целое число m \in \Z, если существуют такие целые числа x_0, y_0, что выполнено равенство: f(x_0,y_0)=ax_0^2+bx_0y_0+cy_0^2. В случае если выполнено равенство \gcd (x_0, y_0) = 1 , то представление называется примитивным.

Для любой неопределенной квадратичной формы f=\begin{pmatrix} a,&b,&c \end{pmatrix} можно определить оператор редукции как:

 \rho \begin{pmatrix} a,&b,&c \end{pmatrix}  = \begin{pmatrix} c,&r(-b,c),&\frac{r(-b,c)^2 - \Delta }{4c} \end{pmatrix} ,где r(-b,c) - определено, как целое число r, однозначно определяемое условиями: [8]
  1.  r + b \equiv 0 \mod (2c)
  2.  -|c| < r < |c|, \quad if \quad \sqrt{ \Delta } < |c|
  3.  \sqrt{ \Delta } - 2|c| < r < \sqrt{ \Delta }, \quad if \quad |c| < \sqrt{ \Delta }

Результат применения оператора  \rho к форме f nраз записывается в виде  \rho ^ n (f) . Также определен оператор \rho^{-1} как:

 \rho^{-1} \begin{pmatrix} a,&b,&c \end{pmatrix}  = \begin{pmatrix} \frac{r(-b,c)^2 - \Delta }{4c} ,&r(-b,c),&c \end{pmatrix} , где r(-b,c) определен так же как и в прошлом случае. Заметим, что в результате применения операторов  \rho^{-1} и  \rho к квадратичной форме f=\begin{pmatrix} a,&b,&c \end{pmatrix} с дискриминантом \Delta, полученные квадратичные формы так же будут иметь дискриминант \Delta.

Метод получения редуцированной формы, эквивалентной данной, был найден еще Карлом Гауссом и состоит в последовательном применении оператора редукции g= \rho (f), пока f не станет редуцированной.

Теорема.

Каждая форма f эквивалентна некоторой редуцированной форме, и любая редуцированная форма для f равна \rho^{k}(f) для некоторого положительного k. Если f - редуцирована, то \rho(f) также редуцирована.

Так же для ясности понимания всех операций с квадратичными формами нам понадобится понятия квадратных, смежных и неоднозначных квадратичных форм

Варианты[править | править исходный текст]

Идея метода Шенкса состоит в сопоставлении числу n, которое надо разложить, квадратичной бинарной формы f с дискриминантом D = 4n~, с которой потом выполняется серия эквивалентных преобразований и переход от формы f к неоднозначной форме (a',b', c')~. Тогда, \gcd(a', b') будет являться делителем n.

Первый вариант работает с положительно определёнными бинарными квадратичными формами заданного отрицательного дискриминанта и в группе классов форм он находит амбигову форму, которая даёт разложение дискриминанта на множители. Сложность первого варианта составляет O(n^{1/5+\varepsilon})~ при условии истинности расширенной гипотезы Римана.[9]

Второй вариант это SQUFOF, он использует группу классов бинарных квадратичных форм с положительным дискриминантом. В нём также происходит нахождение амбиговой формы и разложение дискриминанта на множители. Сложность SQUFOF составляет O(n^{1/4+\varepsilon})~ арифметических операций; при этом алгоритм работает с целыми числами, не превосходящими 2\sqrt{n}. Среди алгоритмов факторизации с экспоненциальной сложностью SQUFOF считается одним из самых эффективных.[9]

Оценка сходимости[править | править исходный текст]

Согласно расчетам, выполненным самим Шенксом, число итераций первого и второго циклов алгоритма определяется числом w сомножителей числа n и равна примерно:

\frac{C}{2^w-2} \cdot n^{1/4},

где C константа, равная примерно 2,4 для первого цикла итераций.[10]

Описание алгоритма[править | править исходный текст]

Более подробно алгоритм может быть записан в следующем виде:[10]

Вход: Нечетное составное число n, которое требуется факторизовать. Если n\!\!\!\mod 4 = 1, заменим n на 2n. Теперь n\!\!\!\mod 4=2;3. Последнее свойство нужно, чтобы определитель квадратичной формы был фундаментальным, что обеспечивает сходимость метода.

Выход: Нетривиальный делитель n.

1. Определим исходную квадратичную форму f = (1,2b,b^2-D)~, с дискриминантом D = 4n~, где b = \mathcal {b}\sqrt{n}\mathcal {c}.
2. Выполним цикл редуцирований f = \rho(f), пока форма f не станет квадратной.
3. Вычислим квадратный корень из f:~g = (a^\prime, b^\prime, c^\prime) = f^{1/2}~
4. Выполним цикл редуцирований p = \rho(g), пока значение второго коэффициента не стабилизируется b_{i+1}' = b_{i}'~. Число итераций m этого цикла должно быть примерно равно половине от числа итераций первого цикла. Последнее значение a^\prime даст делитель числа n (возможно тривиальный).

Реализация алгоритма[править | править исходный текст]

Теперь опишем алгоритм для реализации на компьютере.[10] Отметим, что хотя теоретическая часть алгоритма связана с эквивалентными преобразованиями квадратичных форм, практическая часть алгоритма выполняется на основе вычисления коэффициентов P,Q,r метода непрерывных дробей без обращения к формам. Каждая итерация цикла соответствует одной операции применения оператора редукции к соответствующей форме. При необходимости можно восстановить соответствующие формы f_k = (a_k,b_k,c_k)~ по формулам: (a_k,b_k,c_k)=((-1)^{k-1}Q_{k-1}, 2P_k, (-1)^kQ_k)


Вход: Составное число n

Выход: Нетривиальный делитель n

  • Инициализация алгоритма.
    • Проверим, является ли n полным квадратом. Если да, то вычислим d=\sqrt{n}, и завершим вычисление. Иначе, перейдем к следующему пункту.
    • Если n \equiv 1 (mod 4), тогда заменим n на 2n. Определим D=4n,~q_0=\mathcal {b}\sqrt{D}\mathcal {c}.
    • Определим исходные значения параметров P,Q,r:

P_0=0,~Q_0=1,~r_0=P_1=\mathcal {b}\sqrt{n}\mathcal {c},~Q_1=n-r_0^2, r_1=\mathcal {b}2r_0/Q_1\mathcal {c}.

  • Первый цикл
    • P_k=r_{k-1}\cdot Q_{k-1}-P_{k-1},~Q_k=Q_{k-2}+(P_{k-1}-P_k)\cdot r_{k-1}, r_k=\mathcal {b}\frac{P_k+\mathcal {b}\sqrt{n}\mathcal {c}}{Q_k}\mathcal {c},~k \ge 2.
    • Продолжаем вычисления коэффициентов P_k,~Q_k~r_k до тех пор, пока не найдем Q_k, являющееся полным квадратом. Это должно произойти при некотором k. Пусть Q_k=d^2 для целого d>0. Перейдем к следующему циклу.
  • Второй цикл.
    • начнем цикл вычислений новых параметров P_j^\prime,~Q_j^\prime,~r_j^\prime. Формулы для реализации второго цикла останутся такими же, как раньше. Изменятся только начальные значения параметров P^\prime,~Q^\prime,~r^\prime:
    • P_0^\prime=-P_k,~Q_0^\prime=d,~r_0^\prime=\mathcal {b}\frac{P_0^\prime+\mathcal {b}\sqrt{n}\mathcal {c}}{Q_0^\prime}\mathcal {c},~P_1^\prime=r_0^\prime \cdot Q_0^\prime-P_0^\prime,~Q_1^\prime=(N-P_1^{\prime 2})/Q_0^\prime.
    • Вычисление следует продолжать, пока два подряд идущих значения P_j^\prime,~P_{j+1}^\prime не окажутся равными. Тогда, значение Q_j даст искомый делитель числа n. Описание алгоритма Шенкса закончено.

Как уже было упомянуто, это не единственная реализация этого алгоритма. Так же реализации алгоритма можно найти здесь[8]

Пример факторизации числа[править | править исходный текст]

Применим данный метод для факторизации числа N = 22117019[8]

Цикл №1
F_i
i (-1)^{i-1}Q_{i-1} 2 \cdot P_i (-1)^{i}Q_{i}
0 -8215 2 \cdot 4702 1
1 1 2 \cdot 4702 -8215
2 -8215 2 \cdot 3513 1190
3 1190 2 \cdot 3627 -7531
4 -7531 2 \cdot 3904 913
5 913 2 \cdot 4313 -3850
6 -3850 2 \cdot 3387 2765
7 2765 2 \cdot 2143 -6338
8 -6338 2 \cdot 4195 713
9 713 2 \cdot 4361 -4346
10 -4346 2 \cdot 4331 773
11 773 2 \cdot 4172 -6095
12 -6095 2 \cdot 1923 3022
13 3022 2 \cdot 4121 -1699
14 -1699 2 \cdot 4374 1757
15 1757 2 \cdot 4411 -1514
16 -1514 2 \cdot 4673 185
17 185 2 \cdot 4577 -6314
18 -6314 2 \cdot 1737 3025
Цикл №2
G_i
i (-1)^{i-1}Q_{i-1}^\prime 2 \cdot P_i^\prime (-1)^{i}Q_{i}^\prime
0 -55 2 \cdot 4652 8653
1 8653 2 \cdot 4001 -706
2 -706 2 \cdot 4471 3013
3 3013 2 \cdot 4568 -415
4 -415 2 \cdot 4562 3145
5 3145 2 \cdot 1728 -6083
6 -6083 2 \cdot 4355 518
7 518 2 \cdot 4451 -4451
8 -4451 2 \cdot 4451 518

Теперь можно увидеть во втором цикле, что P_7^\prime = P_8^\prime. Следовательно число N = 22117019 = 4451 \cdot 4969.

Применения[править | править исходный текст]

Данный алгоритм используется во многих реализациях NFS и QS для факторизации небольших вспомогательных чисел, возникающих при факторизации большого целого числа. В любом случае, SQUFOF используется в основном как вспомогательный алгоритм в более мощных алгоритмах факторизации и, следовательно, SQUFOF как правило, будет использоваться для факторизации чисел скромных размеров, не имеющих малых простых делителей. Такие числа, как правило, являются произведением небольшого числа различных простых чисел.[8].

Примечания[править | править исходный текст]

  1. Подробнее об истории этого метода и о его связи с методом непрерывных дробей можно узнать из статьи Говера и Вагстаффа (J. Gover, S.S. Wagstaff).
  2. Yike Guo, 1999, High Performance Data Mining: Scaling Algorithms, Applications and Systems.
  3. 1 2 Hans Riesel, 1994, Prime Numbers and Computer Methods for Factorization. Birkhauser,  second edition
  4. Henri Cohen, 1996, A Course in Computational Algebraic Number Theory.
  5. D. A. Buell, 1989, Binary Quadratic Forms
  6. Samuel S. Wagstaff Jr., 2003, Cryptanalysis of Number Theoretic Ciphers
  7. Например в работе SQUARE FORM FACTORIZATION JASON E. GOWER AND SAMUEL S. WAGSTAFF, JR. Assumption 4.12. на странице 20, Assumption 4.5 на стр 16, так же при доказательстве теорем о сложности алгоритма и т.д.
  8. 1 2 3 4 5 SQUARE FORM FACTORIZATION, 2003, SQUARE FORM FACTORIZATION
  9. 1 2 Василенко, 2003, Теоретико-числовые алгоритмы в криптографии
  10. 1 2 3 Ишмухаметов, 2011, Методы факторизации натуральных чисел: Учебное пособие

Литература[править | править исходный текст]

См. также[править | править исходный текст]