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