Факторизация целых чисел с помощью функции 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
If
Else
' Иначе - а где же открывающая скобка?
Response = MsgBox(
"***0шибка в сомножителе: нет {... "
+ Msg, Style, Title)
If
Response = vbYes
Then
' Пользователь выбрал Yes (Да)
MyString =
"Yes"
' Запомним, что выбрал пользователь
Else
' Пользователь выбрал No (Нет)
MyString =
"No"
' Запомним, что выбрал пользователь End If
End
If
Multiplier = Response
End
Function
Sub
PowExp()
' Обработка показателя
Dim
strTemp
As
String
Selection.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