Факторизация квадратных форм Шанкса - Википедия - Shankss square forms factorization
Эта статья требует внимания специалиста по математике.Ноябрь 2008 г.) ( |
Эта статья включает Список ссылок, связанное чтение или внешняя ссылка, но его источники остаются неясными, потому что в нем отсутствует встроенные цитаты.Март 2015 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Факторизация квадратных форм Шанкса это метод для целочисленная факторизация разработан Дэниел Шэнкс как улучшение Метод факторизации Ферма.
Успех метода Ферма зависит от нахождения целых чисел и такой, что , куда - это целое число, которое нужно разложить на множители. Улучшение (замечено Крайчик ) искать целые числа и такой, что . Поиск подходящей пары не гарантирует факторизацию , но это означает, что фактор , и есть большая вероятность, что простые делители из распределяются между этими двумя факторами, так что расчет наибольший общий делитель из и даст нетривиальный фактор .
Практический алгоритм поиска пар которые удовлетворяют был разработан Шанксом, который назвал его «Факторизация квадратной формы» или SQUFOF. Алгоритм может быть выражен в виде непрерывных дробей или квадратичных форм. Хотя сейчас доступны гораздо более эффективные методы факторизации, преимущество SQUFOF состоит в том, что он достаточно мал, чтобы быть реализованным на программируемом калькуляторе.
В 1858 г. чешский математик Вацлав Шимерка использовал метод, аналогичный SQUFOF, чтобы фактор .[1]
Алгоритм
Вход: , целое число, подлежащее факторизации, которое не должно быть простое число ни идеальный квадрат, и небольшой множитель .
Выход: нетривиальный фактор .
Алгоритм:
Инициализировать
Повторение
до того как идеальный квадрат в некоторых даже .
Инициализировать
Повторение
до того как
Тогда если не равно и не равно , тогда является нетривиальным фактором . В противном случае попробуйте другое значение .
Метод Шанкса имеет временную сложность .
Стивен С. Макмат написал более подробное обсуждение математики метода Шанкса вместе с доказательством его правильности.[2]
Пример
Позволять
Цикл вперед | |||
---|---|---|---|
Здесь идеальный квадрат.
Обратный цикл | |||
---|---|---|---|
Здесь .
, что является фактором .
Таким образом,
Примеры реализации
Ниже приведен пример функции C для выполнения SQUFOF факторизации целого числа без знака, не превышающего 64 бит, без переполнения переходных операций.[нужна цитата ]
#включают <inttypes.h>#define nelems (x) (sizeof (x) / sizeof ((x) [0]))const int множитель[] = {1, 3, 5, 7, 11, 3*5, 3*7, 3*11, 5*7, 5*11, 7*11, 3*5*7, 3*5*11, 3*7*11, 5*7*11, 3*5*7*11};uint64_t СКФОФ( uint64_t N ){ uint64_t D, По, п, Pprev, Q, Qprev, q, б, р, s; uint32_t L, B, я; s = (uint64_t)(sqrtl(N)+0.5); если (s*s == N) возвращаться s; за (int k = 0; k < Nelems(множитель) && N <= UINT64_MAX/множитель[k]; k++) { D = множитель[k]*N; По = Pprev = п = sqrtl(D); Qprev = 1; Q = D - По*По; L = 2 * sqrtl( 2*s ); B = 3 * L; за (я = 2 ; я < B ; я++) { б = (uint64_t)((По + п)/Q); п = б*Q - п; q = Q; Q = Qprev + б*(Pprev - п); р = (uint64_t)(sqrtl(Q)+0.5); если (!(я & 1) && р*р == Q) перемена; Qprev = q; Pprev = п; }; если (я >= B) Продолжить; б = (uint64_t)((По - п)/р); Pprev = п = б*р + п; Qprev = р; Q = (D - Pprev*Pprev)/Qprev; я = 0; делать { б = (uint64_t)((По + п)/Q); Pprev = п; п = б*Q - п; q = Q; Q = Qprev + б*(Pprev - п); Qprev = q; я++; } пока (п != Pprev); р = gcd(N, Qprev); если (р != 1 && р != N) возвращаться р; } возвращаться 0;}
Рекомендации
- ^ Леммермейер, Ф. (2013). "Вацлав Шимерка: квадратичные формы и факторизация". Журнал вычислений и математики LMS. 16: 118–129. Дои:10.1112 / S1461157013000065.
- ^ "Факторизация квадратных форм Дэниела Шанкса". CiteSeerX 10.1.1.107.9984. Цитировать журнал требует
| журнал =
(помощь)
- Д. А. Буэлл (1989). Бинарные квадратичные формы. Springer-Verlag. ISBN 0-387-97037-1.
- Д. М. Брессуд (1989). Факторизация и тестирование на примитивность. Springer-Verlag. ISBN 0-387-97040-1.
- Ризель, Ганс (1994). Простые числа и компьютерные методы факторизации (2-е изд.). Бирхаузер. ISBN 0-8176-3743-5.
- Сэмюэл С. Вагстафф-мл. (2013). Радость факторинга. Провиденс, Род-Айленд: Американское математическое общество. С. 163–168. ISBN 978-1-4704-1048-3.
внешняя ссылка
- Дэниел Шэнкс: Анализ и совершенствование метода факторизации непрерывной дроби, (транскрибировано С. Макмат 2004)
- Дэниел Шэнкс: SQUFOF Примечания, (транскрибировано С. Макмат 2004)
- Стивен С. Макмат: Параллельная целочисленная факторизация с использованием квадратичных форм, 2005
- С. Макмат, Ф. Крэбб, Д. Джойнер: Непрерывные дроби и параллельные SQUFOF, 2005
- Джейсон Гауэр, Сэмюэл Вагстафф: Факторизация квадратной формы (Опубликовано)
- Алгоритм факторинга SQUFOF Шанкса
- java-математическая библиотека