VBA Excel - прості числа
VBA Excel - прості числа
Вступ
Сито Ератосфена - це алгоритм, що дозволяє знайти всі прості числа до певної межі ( n- го числа). Це передбачає циклічне проходження всіх чисел від 2 до n, щоб перевірити, чи активне число є кратним. Якщо це не кратне число, то число є простим числом.- Докладніше про сито Ератосфена на Вікіпедії: //en.wikipedia.org/wiki/Sieve_of_Eratosthenes
Алгоритм
Спочатку нам потрібно буде перерахувати всі цифри до NbreMax.- 1 видаляється.
- Виділіть 2 і усуньте всі його численні
- Повторіть операцію для номера 3 .
- Виберіть найменше не виділене число, а потім виключаєте всі його кратні (число 5, ...).
- Повторіть процес, поки не досягнете цілої частини кореня n .
Всі інші числа (до n) є простими числами!
Функція
Цей тип функції можна легко змінити, щоб повернути тип цілочисельного або довгого числа ... Код виконується досить повільно, тому ми обмежимося першими 1500 простими числами ...Функція NbPremiers_Eratosthene (Ранг як довгий) як варіантПеревірте наявність n-го простого числа, використовуючи сито Ератосфена
Dim i As Long, j як довгий, k як довгий, NbreMax як довгий, est_premier (), прапор як булевий
Якщо Rang> = 1 І Rang <= 1500 Потім
ReDim Preserve est_premier (Ран)
k = 0
NbreMax = 20 * Rang 'достатньо для випуску <1500
Flag = True
Для i = 2 Для NbreMax
Для j = 2 До i
Якщо j = i, тоді вийдіть для
Якщо i Mod j = 0, то Flag = False: Exit For
Далі
Якщо Flag = True Тоді
Якщо i = 2 Тоді
est_premier (k) = 1
k = k + 1
Ще
est_premier (k) = i
k = k + 1
End If
Ще
Flag = True
End If
Якщо k = Rang, тоді вийдіть для
Далі i
NbPremiers_Eratosthene = est_premier (Ранг - 1)
Ще
NbPremiers_Eratosthene = "Висхідний тропік тропічний (входить 1 і 1500 включений)."
End If
Функція End
Виклик функції
Доступні два методи:N-й простий номер
Sub Test ()'Щоб отримати 499-й простий номер:
MsgBox NbPremiers_Eratosthene (499)
End Sub
Отримати список перших 99 простих чисел
Sub ListeNbPrems ()Отримати список перших 99 простих чисел
Dim i As Long, Msg As String, Tb (98)
Для i = 1 до 99
Tb (i - 1) = NbPremiers_Eratosthene (i)
Далі i
MsgBox Tb (0) & "" & Tb (1) & "" & Tb (2) & "..." & Tb (UBound (Tb))
End Sub