Вывод делителей натурального числа - VBA

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. Sub Z4()
  2. A = InputBox("Введите натуральное число")
  3. If A <= 0 Then
  4. MsgBox ("Ошибка ввода данных")
  5. Exit Sub
  6. End If
  7. Count = 0
  8. For i = 1 To A
  9. If A / i - Int(A / i) = 0 Then
  10. Count = Count + 1
  11. End If
  12. Next i
  13. MsgBox ("Количество делителей - " & Count & vbCrLf)
  14. End Sub
Что нужно дописать чтобы выводило эти делители?!

Решение задачи: «Вывод делителей натурального числа»

textual
Листинг программы
  1. Option Explicit 'необходимость объявить все переменные
  2. Private Declare Function timeGetTime Lib "winmm.dll" () As Long 'Windows-таймер, 48 сут.
  3.  
  4. Sub AI() 'вывод всех делителей натурального числа длиной до 15 цифр
  5. Dim i, j, t, Count, Count2, answer
  6. Static A
  7.     A = InputBox("Введите a", "Ввод натурального числа", IIf(A = Empty, Year(Now), A))
  8.     If IsNumeric(A) And A <= 0 Or A = Empty Then
  9.        MsgBox ("Ошибка ввода: значение пусто либо не больше нуля.")
  10.        Exit Sub
  11.     End If
  12.      
  13.     If IsNumeric(A) Then ReDim arr(1 To Sqr(A)) Else Exit Sub
  14.  
  15. t = timeGetTime
  16.     For i = 1 To Sqr(A)
  17. '        If (a / i) = (a \ i) Then 'тоже работает, но на числах лишь до 2^31
  18.        If Fix(A / i) = A / i Then
  19.            Count = Count + 1
  20.            arr(Count) = A / i
  21.         End If
  22.     Next i
  23.    
  24.            Count2 = Count 'далее счёт делителей числа a, меньших чем Sqr(a)
  25.    
  26.     For j = Count To 1 Step -1
  27.            Count2 = Count2 + 1
  28.            arr(Count2) = A / arr(j)
  29.     Next j
  30.      
  31.     answer = _
  32.      "Время выполнения: " & Format$((timeGetTime - t) / 1000, "0.000") & " секунды." _
  33.     & vbCr & vbCr & "Количество натуральных делителей " & A & ": " & Count2 & vbCr & _
  34.     vbCr & "Делители: " & Mid(Join(arr, "\"), 1, InStr(Join(arr, "\"), "\\"))
  35.     MsgBox answer
  36.     Debug.Print Join(Split(answer, "\"), Chr(13)) 'в случае если ответ не влез в MsgBox
  37. End Sub

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


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

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

12   голосов , оценка 4.417 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы