Метод факторизации Fermats - Fermats factorization method - Wikipedia

Ферма с факторизация метод, названный в честь Пьер де Ферма, основан на представлении странный целое число как разница двух квадратов:

Эта разница алгебраически факторизованный как ; если ни один из множителей не равен единице, это правильная факторизация N.

Каждое нечетное число имеет такое представление. Действительно, если это факторизация N, тогда

С N странно, то c и d также нечетные, поэтому эти половинки целые. (Число, кратное четырем, также является разностью квадратов: пусть c и d быть даже.)

В простейшей форме метод Ферма может быть даже медленнее, чем пробное деление (худший случай). Тем не менее комбинация пробного деления и ферма более эффективна, чем любая другая.

Основной метод

Пробуют разные значения а, надеясь, что , площадь.

ФермаФактор (N): // N должно быть нечетным    a ← потолок (sqrt (N)) b2 ← a * a - N повторять, пока Би 2 является площадь:        a ← a + 1 b2 ← a * a - N      // эквивалентно: // b2 ← b2 + 2 * a + 1     // a ← a + 1 возвращаться а - sqrt (b2) // или a + sqrt (b2)

Например, чтобы фактор , первая попытка для а квадратный корень из 5959 округляется до следующего целого числа, т.е. 78. Потом, . Поскольку 125 не является квадратом, делается вторая попытка, увеличивая значение а на 1. Вторая попытка также не удалась, потому что 282 снова не квадрат.

Пытаться:123
а787980
б2125282441
б11.1816.7921

Третья попытка дает идеальный квадрат 441. Итак, , , а факторы 5959 находятся и .

Предположим, что N имеет более двух простых множителей. Эта процедура сначала находит факторизацию с наименьшими значениями а и б. То есть, наименьший множитель ≥ квадратный корень из N, и так - наибольший множитель ≤ корень-N. Если процедура находит , что показывает, что N простое.

За , позволять c быть самым большим фактором subroot. , поэтому количество шагов примерно .

Если N простое (так что ), нужно шаги. Это плохой способ доказать примитивность. Но если N имеет множитель, близкий к квадратному корню, метод работает быстро. Точнее, если c отличается меньше чем из , метод требует всего одного шага; это не зависит от размера N.[нужна цитата ]

Ферма и пробное отделение

Попробуйте разложить на множители простое число N = 2345678917, но также вычислить б и аб на протяжении. Поднимаясь из , мы можем свести в таблицу:

а48,43348,43448,43548,436
б276,572173,439270,308367,179
б276.7416.5519.9605.9
аб48,156.348,017.547,915.147,830.1

На практике с этой последней строкой никто не возился, пока б целое число. Но учтите, что если N имел фактор subroot выше , Метод Ферма уже нашел бы это.

Пробное подразделение обычно пытается до 48 432 человек; но после всего четырех шагов Ферма нам нужно разделить только до 47830, чтобы найти множитель или доказать простоту.

Все это предполагает комбинированный метод факторинга. Выберите границу ; использовать метод Ферма для факторов между и . Это дает предел для пробного деления, который . В приведенном выше примере с граница пробного деления - 47830. Разумным выбором может быть давая оценку 28937.

В этом отношении метод Ферма дает убывающую отдачу. Конечно, можно было бы остановиться до этого момента:

а60,00160,002
б21,254,441,0841,254,561,087
б35,418.135,419.8
аб24,582.924,582.2

Улучшение сита

При рассмотрении таблицы для , можно быстро сказать, что ни одно из значений квадраты:

а48,43348,43448,43548,436
б276,572173,439270,308367,179
б276.7416.5519.9605.9

Нет необходимости вычислять все квадратные корни из , и даже не исследовать все значения для а. Квадраты всегда равны 0, 1, 4, 5, 9, 16 по модулю 20. Значения повторяются с каждым увеличением а на 10. В этом примере N равно 17 по модулю 20, поэтому вычитая 17 по модулю 20 (или прибавляя 3), производит 3, 4, 7, 8, 12 и 19 по модулю 20 для этих значений. Очевидно, что только 4 из этого списка могут быть квадратом. Таким образом, должно быть 1 mod 20, что означает, что а равно 1, 9, 11 или 19 по модулю 20; это произведет который заканчивается на 4 mod 20 и, если квадрат, б закончится 2 или 8 мод 10.

Это можно сделать с любым модулем. Используя тот же ,

по модулю 16:Квадраты0, 1, 4 или 9
N mod 16 есть5
так может быть только9
и а должно быть3 или 5 или 11 или 13 по модулю 16
по модулю 9:Квадраты0, 1, 4 или 7
N mod 9 есть7
так может быть только7
и а должно быть4 или 5 по модулю 9

Обычно для каждого модуля выбирают степень различных простых чисел.

Учитывая последовательность а-значения (начало, конец и шаг) и модуля, можно действовать следующим образом:

FermatSieve (N, astart, aend, astep, модуль) a ← astart делать модуль раз: b2 ← a * a - N если b2 - квадрат по модулю модуля: FermatSieve (N, a, aend, astep * modulus, NextModulus) endif        а ← а + ступень Enddo

Но рекурсия останавливается, когда мало а-значения остаются; то есть, когда (aend-astart) / astep мало. Также потому, что а 's размер шага постоянен, можно вычислить последовательные b2 с добавлением.

Дальнейшее модульное усовершенствование можно сделать, применив алгоритм деления как аффинное преобразование, то есть , , , по любому целочисленному кольцу куда . После небольшого количества алгебры можно заключить, что и где s и t идентичны определению переносов, которое делается при умножении делителей на основание .[нужна цитата ]

Улучшение множителя

Метод Ферма работает лучше всего, когда есть множитель, близкий к квадратному корню из N.

Если примерное соотношение двух факторов () известно, то Рациональное число можно выбрать рядом с этим значением. Например, если , тогда является хорошей оценкой меньшего из пары делителей. , а множители примерно равны: коэффициент Ферма, примененный к Nuv, быстро их найдет. потом и . (Пока не c разделяет ты или же d разделяет v.) Дальнейшее обобщение этого подхода предполагает, что , означающий, что .

Как правило, если соотношение неизвестно, различные значения могут быть опробованы, и попытайтесь учесть каждый результат Nuv. Р. Леман разработал систематический способ сделать это, так что плюсовое пробное деление Ферма может учитывать N в время.[1]

Прочие улучшения

Фундаментальные идеи метода факторизации Ферма лежат в основе квадратное сито и общее числовое поле сито, самые известные алгоритмы факторинга больших полупростые, которые являются «худшим случаем». Основное улучшение квадратного сита по сравнению с методом факторизации Ферма состоит в том, что вместо простого нахождения квадрата в последовательности , он находит подмножество элементов этой последовательности, у которых товар квадрат, и он делает это очень эффективно. Конечный результат тот же: разница квадратного мода п что, если нетривиально, может быть использовано для факторизации п.

Смотрите также

Примечания

  1. ^ Леман, Р. Шерман (1974). «Факторинг больших целых чисел» (PDF). Математика вычислений. 28 (126): 637–646. Дои:10.2307/2005940.

Рекомендации

внешняя ссылка