Функция 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
},
{
572389392425637497118853974356
80799950268490508661316904465621201465444456568561
,
1
}}
Иными словами:
M337
=
18199X2806537X95763203297X572389392425637
497118853974356807999502
68490508661316904465621201465444456568561
Теперь нужно проверить, просты ли найденные делители.
PrimeQ[
18199
]
True
PrimeQ[
2806537
]
True
PrimeQ[
95763203297
]
True
PrimeQ[
5723893924256374971188539743568079
99502684905086613169044656212
01465444456565
-
61
]
False
Как видите, все они, за исключением последнего (обозначим его временно через n), самого большого, простые. (Все это заняло менее двух секунд.)
Поскольку 337 – простое число (я опять специально подобрал индекс числа Мерсенна), формулы сокращенного умножения "в лоб" применить не удастся. Но ведь мы можем загрузить пакет теории чисел.
<
<
NumberTheory`FactorIntegerECM`
Теперь, когда пакет загружен, можно вызвать функцию FactorIntegerECM.
FactorIntegerECM[
572389392425637497118
85397435680799950268490508661316
90446562120146544445656561
]
Мгновенно находится множитель.
726584894969
Давайте проверим, прост ли он.
PrimeQ[
726584894969
]
True
Оказывается, прост. Поэтому разделим на найденный множитель полученное на предыдущем шаге число, присвоим частное переменной п и проверим, является ли частное простым числом.
n
=
57238939242563749711885397435680799950268490
508661316904465621201465
44445656561
/
726584894969
787780473264667429936124208424161983
11394008068822475527239136925369
PrimeQ[n]
True
Поскольку полученное частное является простым числом, мы нашли все простые множители 337-го числа Мерсенна М337 и тем самым разложили и этого числового великана на простые множители.
M337
=
18199x2806537x95763203297x
726584894969x787780473264667429
93612420
842416198311394008068822475527239136925369