Jump to content

Метод факторизации Ферма

(Перенаправлено из метода факторизации Ферма )

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

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

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

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

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

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

[ редактировать ]

Кто-то пробует различные значения a , надеясь, что , квадрат.

FermatFactor(N): // N should be odd
    a ← ceiling(sqrt(N))
    b2 ← a*a - N
    repeat until b2 is a square:
        a ← a + 1
        b2 ← a*a - N 
     // equivalently: 
     // b2 ← b2 + 2*a + 1 
     // a ← a + 1
    return a - sqrt(b2) // or a + sqrt(b2)

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

Пытаться: 1 2 3
а 78 79 80
б 2 125 282 441
б 11.18 16.79 21

Третья попытка дает идеальный квадрат 441. Таким образом, , , а факторы числа 5959 равны и .

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

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

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

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

[ редактировать ]

Попробуйте разложить простое число N = 2 345 678 917 на факторы , а также вычислить b и a b повсюду. Поднимаясь от округлив до следующего целого числа, равного 48 433, мы можем свести в таблицу:

Пытаться 1-й 2-й 3-й 4-й
а 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

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

Пробное разделение обычно пытается достичь 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. Значения повторяются при каждом увеличении a на 10. В этом примере N равно 17 по модулю 20, поэтому вычитание 17 по модулю 20 (или прибавление 3) , для этих значений выдает 3, 4, 7, 8, 12 и 19 по модулю 20. Очевидно, что только четверка из этого списка может быть квадратом. Таким образом, должно быть 1 по модулю 20, что означает, что a равно 1, 9, 11 или 19 по модулю 20; это создаст который заканчивается на 4 по модулю 20, а если квадрат, то b заканчивается на 2 или 8 по модулю 10.

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

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

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

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

FermatSieve(N, astart, aend, astep, modulus)
    a ← astart
    do modulus times:
        b2 ← a*a - N
        if b2 is a square, modulo modulus:
            FermatSieve(N, a, aend, astep * modulus, NextModulus)
        endif
        a ← a + astep
    enddo

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

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

[ редактировать ]

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

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

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

Другие улучшения

[ редактировать ]

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

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Леман, Р. Шерман (1974). «Факторинг больших целых чисел» (PDF) . Математика вычислений . 28 (126): 637–646. дои : 10.2307/2005940 . JSTOR   2005940 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 751722c4abd9e65473ac304420c65da2__1719734220
URL1:https://arc.ask3.ru/arc/aa/75/a2/751722c4abd9e65473ac304420c65da2.html
Заголовок, (Title) документа по адресу, URL1:
Fermat's factorization method - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)