Факторизация целых чисел с помощью функции FactorInteger. Факторизация чисел Мерсенна.
Style = vbYesNo + vbCritical + vbDefaultButton2' Кнопки Title = "Очередной множитель: степень простого"'Заголовок окна Response = vbYes ' Пока ошибки не обнаружены ' Selection.MoveRight Unit: = wdCharacter, Count: = 1, Extend: = wdExtend strTemp = Selection.Text ' Выбираем очередной символ If strTemp = "{" Then ' Если открывающая скобка - начало множителя Selection.Delete Unit: = wdCharacter, Count: = 1 ' Скобку удаляем Selection.MoveRight Unit: = wdWord, Count: = l, Extend: = wdExtend Selection.MoveRight Unit: = wdCharacter, Count: = 1 ' Основание Selection.MoveRight Unit: = wdWord, Count: = 1, Extend: = wdExtend strTemp = Selection.Text ' Основание отделяется, от показателя If strTemp = "," Then' Разделитель нашли PowExp ' Обрабатываем показатель Selection.MoveRight Unit: = wdCharacter, Count: = 1, Extend: = wdExtend strTemp = Selection.Text ' Этот символ завершает множитель 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 Else ' Иначе - а где же запятая? Response = MsgBox("***0шибка в сомножителе: нет,... " + Msg, Style, Title) If Response = vbYes Then' Пользователь выбрал Yes (Да) MyString = "Yes"'Запомним, что выбрал пользователь Else ' Пользователь выбрал No (Нет) MyString = "No" ' Запомним, что выбрал пользователь End If End IfElse ' Иначе - а где же открывающая скобка? Response = MsgBox("***0шибка в сомножителе: нет {... " + Msg, Style, Title) If Response = vbYes Then ' Пользователь выбрал Yes (Да) MyString = "Yes"' Запомним, что выбрал пользователь Else ' Пользователь выбрал No (Нет) MyString = "No" ' Запомним, что выбрал пользователь End If End IfMultiplier = Response End FunctionSub PowExp() ' Обработка показателя Dim strTemp As StringSelection.Delete Unit: = wdCharacter, Count: = 1 ' Удаляем символ Selection.MoveRight Unit: = wdWord, Count: = 1, Extend: = wdExtend strTemp = Selection.Text ' Это и есть показатель If strTemp = "1" Then ' Если показатель равен 1 Selection.Delete Unit: = wdCharacter, Count: = 1 ' Удаляем его Else ' В противном случае форматируем его как надстрочный With Selection.Font .Superscript = True 'Надстрочный End With Selection.MoveRight Unit: = wdCharacter, Count: = 1 Selection.Font.Reset 'Восстановить стиль End If End Sub