Иллюстрированный самоучитель по Mathematica 5

Факторизация целых чисел с помощью функции FactorInteger. Факторизация чисел Мерсенна.

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


Числами Мерсенна, как известно, называются числа Мn = 2n -1. Как следует из формулы разложения двучлена an -bn, они могут быть простыми лишь при простом п. При четном n выражение 2n -1 можно разложить на множители, пользуясь, например, формулой для разности квадратов. Вот первые три числа Мерсенна: М1= 1; M2 == 3; M3 = 7. Дальнейшие вычисления поручим системе Mathematica. Для этого напишем программу для разложения чисел Мерсенна, получающихся при n = 1.2, 3,…, k.

Сначала давайте решим какой-нибудь конкретный пример. Разложим, например, на множители число M67. Марен Мерсенн в 1644 году высказал мнение, что это число простое. Однако ошибочность этого утверждения была установлена Э. Люка только в 1875 году. Давайте же посмотрим, сколько времени потребуется системе Mathematica, чтобы справиться с более трудной задачей – разложением на простые множители. Итак, вводим запрос Factorlnteger[ 2^67-1 ]. и мгновенно получаем ответ.

{193707721.1}, {761838257287.1}}

Вот это да! Mathematica почти мгновенно сделала то, на что математикам потребовалось затратить 231 год!

Теперь можем смело приступить к написанию программы. В качестве последнего числа, разлагаемого на множители, выберем М257. Именно это число было исследовано М. Б. Крайчиком, который установил, что оно составное. Программа может выглядеть так:

Do[Print[n, ": ", Factor - Integer[2 ^ n - 1]], {n, 257}]

Однако вывод такой программы выглядит несколько "однолинейно".

1 {}
2 {{3.1}}
3 {{7.1}}
4 {{3.1},{5.1}}
5 {{31.1}}
6 {{3.2},{7.1.}}
7 {{127.1}}
8 {{3.1},{5.1},{17.1}}
9 {{7.1},{73.1}}
10 {{3.1},{11.1},{31.1}}
11 {{23.1},{89.1}}
12 {{3.2},{5.1},{7.1},{13.1}}
13 {{8191.1}}
14 {{3.1},{43.1},{127.1}}
15 {{7.1},{31.1},{151.1}}
16 {{3.1},{5.1},{17.1},{257.1}}
17 {{131071.1}}
18 {{3.3},{7.1},{19.1},{73.1}}
19 {{524287.1}}
20 {{3.1},{5.2},{11.1},(31.1),{41.1}}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.