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

Факторизация дробей

Прочитав заголовок, вы, возможно, скажете: "Раскладывать дроби на простые множители? Да как же это?! Такой операции в арифметике нет!". Действительно, такой операции вроде бы и нет, но вспомните, как часто приходится раскладывать на простые множители числитель и знаменатель одной и той же дроби. И чтобы вы не мучились, по отдельности вызывая функцию FactorInteger для числителя и знаменателя, можете вызвать ее для всей дроби. Это ведь так удобно! В каком же виде будет представлено разложение? Почти в том же, что и для целых чисел, но только показатели простых множителей знаменателя будут отрицательными. Вот пример:

Factorlnteger[1952 / 1921] = {{2.5},{17,-1},{61.1},{113,-1}}

Давайте же теперь испытаем функцию FactorInteger в новой роли:

Do[Print[n, ":", Factorlnteger[BernoulliB[n]]], {n, 2.102.2}]

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

Sub Factorization()
'Обработка списка множителей
Dim strTemp As String
Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Msg = "Хотите продолжить?"
' Вопрос
Style = vbYesNo + vbCritical + vbDefaultButton2
'Кнопки
Title = "Разложение на множители"
'Заголовок окна
OptPasteSmartCutPaste = Options.
PasteSmartCutPaste Options.
PasteSmartCutPaste = False
Response = vbYes ' Пока ошибки не обнаружены
Selection.Find.ClearFormatting
' Очистка формата в поле поиска
With Selection.Find
.Text = "{"
' Что ищем - открывающую скобку
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False 
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForm? = False
End With Selection.Find.Execute
' Находим открывающую фигурную скобку списка
strTemp = Selection.Text
If strTemp = "{" Then
' Если нашли скобку, обрабатываем список
Selection.Delete Unit: = wdCharacter, Count: = 1
' Удаляем скобку
Do ' В цикле обрабатываем все элементы списка
Response = Multiplier
' Обработка множителя и его показателя
Selection.MoveRight Unit: = wdCharacter, Count: = 1, Extend: = wdExtend
strTemp = Selection.Text
' Выбираем очередной символ
If strTemp = ","
Then ' Это должна быть запятая
Selection.Delete Unit: = wdCharacter, Count: = 1
' Удаляем ее Selection.Font.Reset
' Сбрасываем форматирование
Selection.InsertSymbol Font: = "Symbol", _
CharacterNumber: = - 3916, Unicode: = True
' Знак умножения
End If
' Запятую заменили знаком умножения
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.