Факторизация дробей
Прочитав заголовок, вы, возможно, скажете: "Раскладывать дроби на простые множители? Да как же это?! Такой операции в арифметике нет!". Действительно, такой операции вроде бы и нет, но вспомните, как часто приходится раскладывать на простые множители числитель и знаменатель одной и той же дроби. И чтобы вы не мучились, по отдельности вызывая функцию 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 StringDim Msg, Style, Title, Help, Ctxt, Response, MyString Msg = "Хотите продолжить?"' Вопрос Style = vbYesNo + vbCritical + vbDefaultButton2 'Кнопки Title = "Разложение на множители"'Заголовок окна OptPasteSmartCutPaste = Options. PasteSmartCutPaste Options. PasteSmartCutPaste = FalseResponse = vbYes ' Пока ошибки не обнаружены Selection.Find.ClearFormatting ' Очистка формата в поле поиска With Selection.Find .Text = "{"' Что ищем - открывающую скобку .Forward = True.Wrap = wdFindContinue .Format = False.MatchCase = False.MatchWholeWord = False .MatchWildcards = False.MatchSoundsLike = False.MatchAllWordForm? = FalseEnd 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' Запятую заменили знаком умножения