Вывод делителей натурального числа - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.417 из 5
Похожие ответы