Функция FactorIntegerECM (попытка факторизации больших чисел Мерсенна)
Факторизация 337-го числа Мерсенна М337
Чтобы освоить методику применения функций Factorlnteger и FactorIntegerECM, попробуем разложить на простые множители 337-е число Мерсенна M337. Сначала можно попытаться применить функцию Factorlnteger. Но как и в случае 317-го числа Мерсенна M317, это не даст результата за приемлемое время. Тогда применим функцию Factorlnteger с опцией FactorComplete ->False, чтобы найти хоть какие-нибудь делители 337-го числа Мерсенна М337.
Factorlnteger[2 ^ 337 - 1, FactorComplete > False]Результат будет таким.
Factorlnteger::facfn: Unable to factor 57238939242563 "51" 465444456568561.  More...Зато чуть ниже будут найдены делители.
{{18199, 1}, (2806537.1), (95763203297, 1}, {57238939242563749711885397435680799950268490508661316904465621201465444456568561, 1}}Иными словами:
M337=18199X2806537X95763203297X57238939242563749711885397435680799950268490508661316904465621201465444456568561Теперь нужно проверить, просты ли найденные делители.
PrimeQ[18199] TruePrimeQ[2806537] TruePrimeQ[95763203297] TruePrimeQ[57238939242563749711885397435680799950268490508661316904465621201465444456565-61] FalseКак видите, все они, за исключением последнего (обозначим его временно через n), самого большого, простые. (Все это заняло менее двух секунд.)
Поскольку 337 – простое число (я опять специально подобрал индекс числа Мерсенна), формулы сокращенного умножения "в лоб" применить не удастся. Но ведь мы можем загрузить пакет теории чисел.
<<NumberTheory`FactorIntegerECM`Теперь, когда пакет загружен, можно вызвать функцию FactorIntegerECM.
FactorIntegerECM[5723893924256374971188539743568079995026849050866131690446562120146544445656561]Мгновенно находится множитель.
726584894969Давайте проверим, прост ли он.
PrimeQ[726584894969] TrueОказывается, прост. Поэтому разделим на найденный множитель полученное на предыдущем шаге число, присвоим частное переменной п и проверим, является ли частное простым числом.
n = 5723893924256374971188539743568079995026849050866131690446562120146544445656561 / 72658489496978778047326466742993612420842416198311394008068822475527239136925369PrimeQ[n] TrueПоскольку полученное частное является простым числом, мы нашли все простые множители 337-го числа Мерсенна М337 и тем самым разложили и этого числового великана на простые множители.
M337=18199x2806537x95763203297x726584894969x78778047326466742993612420 842416198311394008068822475527239136925369