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

Метод квадратичных форм Шенкса — метод факторизации целых чисел, основанный на применении квадратичных форм, разработанный . в 1975 году, как развитие метода факторизации Ферма.
 Для 32-разрядных компьютеров алгоритмы, основанные на данном методе, являются безусловными лидерами среди алгоритмов факторизации для чисел от 1010 до 1018 и, вероятно, таковыми останутся. Данный алгоритм может разделить практически любое составное 18-значное число менее чем за миллисекунду. Алгоритм является чрезвычайно простым, красивым и эффективным. Кроме того, методы, базирующиеся на данном алгоритме, используются как вспомогательные при разложении делителей больших чисел типа чисел Ферма.

История


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

Вспомогательные определения


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

f(x,y)=ax2+bxy+cy2=(xy)(ab0c)(xy).\\
  В методе Шенкса используются только неопределенные формы. Под Δ будем понимать дискриминант квадратичной формы. Будем говорить, что квадратичная форма f представляет целое число m\Z, если существуют такие целые числа x0,y0, что выполнено равенство: f(x0,y0)=ax02+bx0y0+cy02. В случае если выполнено равенство gcd(x0,y0)=1, то представление называется примитивным.
 Для любой неопределенной квадратичной формы f=(a,b,c) можно определить оператор редукции как:

ρ(a,b,c)=(c,r(b,c),r(b,c)2Δ4c),где r(b,c) — определено, как целое число r, однозначно определяемое условиями:
 :\# r+b0mod(2c)
 :\# |c|<r<|c|,ifΔ<|c|
 :\# Δ2|c|<r<Δ,if|c|<Δ
  Результат применения оператора ρ к форме f nраз записывается в виде ρn(f). Также определен оператор ρ1 как:

ρ1(a,b,c)=(r(b,c)2Δ4c,r(b,c),c), где r(b,c) определен так же как и в прошлом случае. Заметим, что в результате применения операторов ρ1 и ρ к квадратичной форме f=(a,b,c) с дискриминантом Δ, полученные квадратичные формы так же будут иметь дискриминант Δ.
  Метод получения редуцированной формы, эквивалентной данной, был найден еще Карлом Гауссом и состоит в последовательном применении оператора редукции g=ρ(f), пока f не станет редуцированной.
Теорема.
 Так же для ясности понимания всех операций с квадратичными формами нам понадобится понятия квадратных, смежных и неоднозначных квадратичных форм

Варианты


 Идея метода Шенкса состоит в сопоставлении числу n, которое надо разложить, квадратичной бинарной формы f с дискриминантом D=4n, с которой потом выполняется серия эквивалентных преобразований и переход от формы f к неоднозначной форме (a,b,c). Тогда, gcd(a,b) будет являться делителем n.
 Первый вариант работает с положительно определёнными бинарными квадратичными формами заданного отрицательного дискриминанта и в группе классов форм он находит амбигову форму, которая даёт разложение дискриминанта на множители. Сложность первого варианта составляет O(n1/5+ε) при условии истинности расширенной гипотезы Римана.
 Второй вариант это SQUFOF, он использует группу классов бинарных квадратичных форм с положительным дискриминантом. В нём также происходит нахождение амбиговой формы и разложение дискриминанта на множители. Сложность SQUFOF составляет O(n1/4+ε) арифметических операций; при этом алгоритм работает с целыми числами, не превосходящими 2n. Среди алгоритмов факторизации с экспоненциальной сложностью SQUFOF считается одним из самых эффективных.

Оценка сходимости


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

Описание алгоритма


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

  1. Определим исходную квадратичную форму f=(1,2b,b2D), с дискриминантом D=4n, где b=bnc.


 2. Выполним цикл редуцирований f=ρ(f), пока форма f не станет квадратной.


 3. Вычислим квадратный корень из f:g=(a,b,c)=f1/2


 4. Выполним цикл редуцирований p=ρ(g), пока значение второго коэффициента не стабилизируется bi+1=bi. Число итераций m этого цикла должно быть примерно равно половине от числа итераций первого цикла. Последнее значение a даст делитель числа n (возможно тривиальный).

Реализация алгоритма


 Теперь опишем алгоритм для реализации на компьютере. Отметим, что хотя теоретическая часть алгоритма связана с эквивалентными преобразованиями квадратичных форм, практическая часть алгоритма выполняется на основе вычисления коэффициентов P,Q,r метода непрерывных дробей без обращения к формам. Каждая итерация цикла соответствует одной операции применения оператора редукции к соответствующей форме. При необходимости можно восстановить соответствующие формы fk=(ak,bk,ck) по формулам: (ak,bk,ck)=((1)k1Qk1,2Pk,(1)kQk)
Вход: Составное число n
Выход: Нетривиальный делитель n

  • Инициализация алгоритма.
    • Проверим, является ли n полным квадратом. Если да, то вычислим d=n, и завершим вычисление. Иначе, перейдем к следующему пункту.
    • Если n1(mod4), тогда заменим n на 2n. Определим D=4n,q0=bDc.
    • Определим исходные значения параметров P,Q,r:

P0=0,Q0=1,r0=P1=bnc,Q1=nr02,r1=b2r0/Q1c.

  • Первый цикл
    • Pk=rk1Qk1Pk1,Qk=Qk2+(Pk1Pk)rk1,rk=bPk+bncQkc,k2.
    • Продолжаем вычисления коэффициентов Pk,Qkrk до тех пор, пока не найдем Q\_k, являющееся полным квадратом. Это должно произойти при некотором k. Пусть Qk=d2 для целого d>0. Перейдем к следующему циклу.


  • Второй цикл.
    • начнем цикл вычислений новых параметров Pj,Qj,rj. Формулы для реализации второго цикла останутся такими же, как раньше. Изменятся только начальные значения параметров P,Q,r:
    • P0=Pk,Q0=d,r0=bP0+bncQ0c,P1=r0Q0P0,Q1=(NP12)/Q0.
    • Вычисление следует продолжать, пока два подряд идущих значения Pj,Pj+1 не окажутся равными. Тогда, значение Qj даст искомый делитель числа n. Описание алгоритма Шенкса закончено.

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

Пример факторизации числа


 Применим данный метод для факторизации числа N=22117019
Цикл №2
Gi
i
0
1
2
3
4
5
6
7
8

 Теперь можно увидеть во втором цикле, что P7=P8. Следовательно число N=22117019=44514969.

Применения


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