Вывод делителей натурального числа - VBA
Формулировка задачи:
Что нужно дописать чтобы выводило эти делители?!
Решение задачи: «Вывод делителей натурального числа»
textual
Листинг программы
Option Explicit 'необходимость объявить все переменные
Private Declare Function timeGetTime Lib "winmm.dll" () As Long 'Windows-таймер, 48 сут.
Sub AI() 'вывод всех делителей натурального числа длиной до 15 цифр
Dim i, j, t, Count, Count2, answer
Static A
A = InputBox("Введите a", "Ввод натурального числа", IIf(A = Empty, Year(Now), A))
If IsNumeric(A) And A <= 0 Or A = Empty Then
MsgBox ("Ошибка ввода: значение пусто либо не больше нуля.")
Exit Sub
End If
If IsNumeric(A) Then ReDim arr(1 To Sqr(A)) Else Exit Sub
t = timeGetTime
For i = 1 To Sqr(A)
' If (a / i) = (a \ i) Then 'тоже работает, но на числах лишь до 2^31
If Fix(A / i) = A / i Then
Count = Count + 1
arr(Count) = A / i
End If
Next i
Count2 = Count 'далее счёт делителей числа a, меньших чем Sqr(a)
For j = Count To 1 Step -1
Count2 = Count2 + 1
arr(Count2) = A / arr(j)
Next j
answer = _
"Время выполнения: " & Format$((timeGetTime - t) / 1000, "0.000") & " секунды." _
& vbCr & vbCr & "Количество натуральных делителей " & A & ": " & Count2 & vbCr & _
vbCr & "Делители: " & Mid(Join(arr, "\"), 1, InStr(Join(arr, "\"), "\\"))
MsgBox answer
Debug.Print Join(Split(answer, "\"), Chr(13)) 'в случае если ответ не влез в MsgBox
End Sub