Факторизация целых чисел с помощью функции FactorInteger. Факторизация чисел Мерсенна.
Кроме того, он и читается с трудом. Поэтому для преобразования вывода в привычную форму лучше всего использовать макрос, написанный на VBA для Word 2002.
Sub
Factorization() i
'Обработка списка множителей
Dim
strTemp
As
String
Dim
Msg, Style, Title, Help, Ctxt, Response, MyString, R
Msg =
"Хотите продолжить?"
' Вопрос
Style = vbYesNo + vbCritical + vbDefaultButton2
' Кнопки
Title =
"Разложение на множители"
' Заголовок окна
Response = vbYes
' Пока ошибки не обнаружены
Selection.Find.ClearFormatting
'Очистка формата в поле поиска With Selection.Find
.Text =
"{"
' Что ищем - открывающую скобку
.Forward =
True
.Wrap = wdFindContinue
.Format =
False
.MatchCase =
False
.MatchWholeWord =
False
.MatchWildcards =
False
.MatchSoundsLike =
False
.MatchAllWordForms =
False
End
With
Selection.Find.Execute
'Находим открывающую фигурную скобку списка
strTemp = Selection.Text
If
strTemp =
"{"
Then
' Если нашли скобку, обрабатываем список
Selection.Delete Unit: = wdCharacter, Count: = 1
' Удаляем скобку Do '
В цикле обрабатываем все элементы списка
Response = Multiplier
'
Обработка множителя и его показателя
If
Response = vbYes
Then
Selection.MoveRight Unit: = wdCharacter, Count: = 1, _
Extend: = wdExtend
strTemp = Selection.Text
' Выбираем очередной символ
If
strTemp =
","
Then
' Это должна быть запятая
Selection.Delete Unit: = wdCharacter, Count: = l
' Удаляем ее
Selection.Font.Reset
' Сбрасываем форматирование
Selection.InsertSymbol Font: =
"Symbol"
,
_ CharacterNumber: = - 3916,
Unicode
: =
True
' Знак умножения
End
If
' Запятую заменили знаком умножения Else
R = MsgBox(
"***Ошибка: неправильно записан множитель."
_
+ Msg, Style, Title)
End
If
Loop
While
strTemp =
","
And
(Response = vbYes)
'Выполняем цикл, пока не обработаем все
'множители 1 или не обнаружим ошибку
If
strTemp =
"}"
Then
' Список должен заканчиваться закр. скобкой
Selection.Delete Unit: = wdCharacter, Count: = 1
' Удаляем скобку
Else
Response = MsgBox(
"***0шибка: в конце списка нет }... "
_
+ Msg, Style, Title)
If
Response = vbYes
Then
' Пользователь выбрал Yes (Да)
MyString =
"Yes"
' Запомним, что выбрал пользователь
Else
' Пользователь выбрал No (Нет)
MyString =
"No"
' Запомним, что выбрал пользователь
End
If
End
If
End
If
End
Sub
Function
Multiplier() i
' Обработка множителя (и его степени)
Dim
strTemp
As
String
Dim
Msg, Style, Title, Help, Ctxt, Response, MyString
Msg =
"Хотите продолжить?"
' Вопрос к пользователю