Метод факторизации Фермаца - Википедия - Fermats factorization method
Ферма с факторизация метод, названный в честь Пьер де Ферма, основан на представлении странный целое число как разница двух квадратов:
Эта разница алгебраически факторизованный как ; если ни один из множителей не равен единице, это правильная факторизация 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 снова не квадрат.
Пытаться: | 1 | 2 | 3 |
---|---|---|---|
а | 78 | 79 | 80 |
б2 | 125 | 282 | 441 |
б | 11.18 | 16.79 | 21 |
Третья попытка дает идеальный квадрат 441. Итак, , , а факторы 5959 находятся и .
Предположим, что N имеет более двух простых множителей. Эта процедура сначала находит факторизацию с наименьшими значениями а и б. То есть, наименьший множитель ≥ квадратный корень из N, и так - наибольший множитель ≤ корень-N. Если процедура находит , что показывает, что N простое.
За , позволять c быть самым большим фактором subroot. , поэтому количество шагов примерно .
Если N простое (так что ), нужно шаги. Это плохой способ доказать примитивность. Но если N имеет множитель, близкий к квадратному корню, метод работает быстро. Точнее, если c отличается меньше чем из , метод требует всего одного шага; это не зависит от размера N.[нужна цитата ]
Ферма и пробное отделение
Попробуйте разложить на множители простое число N = 2345678917, но также вычислить б и а − б на протяжении. Поднимаясь из , мы можем свести в таблицу:
а | 48,433 | 48,434 | 48,435 | 48,436 |
---|---|---|---|---|
б2 | 76,572 | 173,439 | 270,308 | 367,179 |
б | 276.7 | 416.5 | 519.9 | 605.9 |
а − б | 48,156.3 | 48,017.5 | 47,915.1 | 47,830.1 |
На практике с этой последней строкой никто не возился, пока б целое число. Но учтите, что если N имел фактор subroot выше , Метод Ферма уже нашел бы это.
Пробное подразделение обычно пытается до 48 432 человек; но после всего четырех шагов Ферма нам нужно разделить только до 47830, чтобы найти множитель или доказать простоту.
Все это предполагает комбинированный метод факторинга. Выберите границу ; использовать метод Ферма для факторов между и . Это дает предел для пробного деления, который . В приведенном выше примере с граница пробного деления - 47830. Разумным выбором может быть давая оценку 28937.
В этом отношении метод Ферма дает убывающую отдачу. Конечно, можно было бы остановиться до этого момента:
а | 60,001 | 60,002 |
---|---|---|
б2 | 1,254,441,084 | 1,254,561,087 |
б | 35,418.1 | 35,419.8 |
а − б | 24,582.9 | 24,582.2 |
Улучшение сита
При рассмотрении таблицы для , можно быстро сказать, что ни одно из значений квадраты:
а | 48,433 | 48,434 | 48,435 | 48,436 |
---|---|---|---|---|
б2 | 76,572 | 173,439 | 270,308 | 367,179 |
б | 276.7 | 416.5 | 519.9 | 605.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]
Прочие улучшения
Фундаментальные идеи метода факторизации Ферма лежат в основе квадратное сито и общее числовое поле сито, самые известные алгоритмы факторинга больших полупростые, которые являются «худшим случаем». Основное улучшение квадратного сита по сравнению с методом факторизации Ферма состоит в том, что вместо простого нахождения квадрата в последовательности , он находит подмножество элементов этой последовательности, у которых товар квадрат, и он делает это очень эффективно. Конечный результат тот же: разница квадратного мода п что, если нетривиально, может быть использовано для факторизации п.
Смотрите также
- Завершение квадрата
- Факторизация многочленов
- Факторная теорема
- Правило FOIL
- Факторизация моноида
- Треугольник Паскаля
- главный фактор
- Факторизация
- Метод факторизации Эйлера
- Целочисленная факторизация
- Программный синтез
- Таблица гауссовских целочисленных факторизаций
- Уникальная факторизация
Примечания
- ^ Леман, Р. Шерман (1974). «Факторинг больших целых чисел» (PDF). Математика вычислений. 28 (126): 637–646. Дои:10.2307/2005940.
Рекомендации
- Ферма (1894 г.), Oeuvres de Fermat, 2, п. 256
- Макки, Дж (1999). «Ускорение метода факторинга Ферма». Математика вычислений (68): 1729–1737.
внешняя ссылка
- Время выполнения факторизации Ферма, на blogspot.in
- Онлайн-калькулятор факторизации Ферма, на windowspros.ru