Jump to content

Факторизация форм квадрата Шанкса

(Перенаправлено с SQUFOF )

Факторизация квадратных форм Шэнкса — это метод факторизации целых чисел, разработанный Дэниелом Шэнксом как усовершенствование метода факторизации Ферма .

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

Практический алгоритм поиска пар которые удовлетворяют был разработан Шанксом, который назвал его факторизацией квадратных форм или SQUFOF. Алгоритм может быть выражен через цепные дроби или через квадратичные формы. Хотя сейчас доступны гораздо более эффективные методы факторизации, SQUFOF имеет то преимущество, что он достаточно мал, чтобы его можно было реализовать на программируемом калькуляторе. Шанкс запрограммировал его на HP-65 , выпущенном в 1974 году, который имеет память только для девятизначных чисел и позволяет программировать только 100 шагов/нажатий клавиш. Существуют версии алгоритма, использующие мало памяти, и версии, хранящие список значений, которые выполняются быстрее.

В 1858 году чешский математик Вацлав Шимерка использовал метод, аналогичный SQUFOF, для факторинга. . [1]

Алгоритм

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

Примечание. Эта версия алгоритма работает в некоторых примерах, но часто зацикливается.

В этой версии список не используется.

Вход : , целое число, подлежащее факторизации, которое не должно быть ни простым числом , ни полным квадратом , а также небольшим положительным целым числом, .

Выход : нетривиальный фактор .

Алгоритм:

Инициализировать

Повторить

до является идеальным квадратом при некотором нечетном значении .

Начните вторую фазу (обратный цикл).

Инициализировать , , и , где , и относятся к предыдущему этапу. используется при расчете это недавно вычисленное значение .

Набор и , где это недавно вычисленное значение .

Повторить

до [ нужна ссылка ]

Тогда, если не равен и не равен , затем является нетривиальным фактором . В противном случае попробуйте другое значение . [ нужна ссылка ]

Метод Шанкса имеет временную сложность . [2]

Стивен С. Макмат написал более подробное обсуждение математики метода Шанкса, вместе с доказательством его правильности. [3]

Позволять

Цикл вперед

Здесь — идеальный квадрат, поэтому первая фаза заканчивается.

Для второго этапа установите . Затем:

Обратный цикл

Здесь , так что вторая фаза заканчивается. Теперь посчитаем , что является фактором .

Таким образом, .

Пример реализации

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

Ниже приведен пример функции C для выполнения факторизации SQUFOF целого числа без знака длиной не более 64 бит без переполнения переходных операций. [ нужна ссылка ]

#include <inttypes.h>
#define nelems(x) (sizeof(x) / sizeof((x)[0]))

const int multiplier[] = {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 SQUFOF( uint64_t N )
{
    uint64_t D, Po, P, Pprev, Q, Qprev, q, b, r, s;
    uint32_t L, B, i;
    s = (uint64_t)(sqrtl(N)+0.5);
    if (s*s == N) return s;
    for (int k = 0; k < nelems(multiplier) && N <= UINT64_MAX/multiplier[k]; k++) {
        D = multiplier[k]*N;
        Po = Pprev = P = sqrtl(D);
        Qprev = 1;
        Q = D - Po*Po;
        L = 2 * sqrtl( 2*s );
        B = 3 * L;
        for (i = 2 ; i < B ; i++) {
            b = (uint64_t)((Po + P)/Q);
            P = b*Q - P;
            q = Q;
            Q = Qprev + b*(Pprev - P);
            r = (uint64_t)(sqrtl(Q)+0.5);
            if (!(i & 1) && r*r == Q) break;
            Qprev = q;
            Pprev = P;
        };
        if (i >= B) continue;
        b = (uint64_t)((Po - P)/r);
        Pprev = P = b*r + P;
        Qprev = r;
        Q = (D - Pprev*Pprev)/Qprev;
        i = 0;
        do {
            b = (uint64_t)((Po + P)/Q);
            Pprev = P;
            P = b*Q - P;
            q = Q;
            Q = Qprev + b*(Pprev - P);
            Qprev = q;
            i++;
        } while (P != Pprev);
        r = gcd(N, Qprev);
        if (r != 1 && r != N) return r;
    }
    return 0;
}
  1. ^ Леммермейер, Ф. (2013). «Вацлав Шимерка: квадратичные формы и факторизация» . LMS Журнал вычислений и математики . 16 : 118–129. дои : 10.1112/S1461157013000065 .
  2. ^ ( Ризель 1994 : 189)
  3. ^ «Факторизация квадратных форм Дэниела Шэнкса». 2004. CiteSeerX   10.1.1.107.9984 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 623535fbf4263b1893759c059e887fc8__1702714380
URL1:https://arc.ask3.ru/arc/aa/62/c8/623535fbf4263b1893759c059e887fc8.html
Заголовок, (Title) документа по адресу, URL1:
Shanks's square forms factorization - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)