VBA Excel - Prime numere
VBA Excel - Prime numere
Introducere
Sita lui Eratosthenes este un algoritm care ne permite să găsim toate numerele prime până la o anumită limită (numărul n ). Aceasta implică looping prin toate numerele de la 2 la n, pentru a verifica dacă numărul activ este un număr multiplu. Dacă nu este un multiplu, atunci numărul este un număr prime.- Mai multe informații despre Sieve of Eratosthenes pe Wikipedia: //en.wikipedia.org/wiki/Sieve_of_Eratosthenes
Algoritmul
Mai întâi va trebui să listați toate numerele până la NbreMax.- 1 este eliminat.
- Evidențiați 2 și eliminați toate multiplele sale
- Repetați operația pentru numărul 3 .
- Alegeți numărul cel mai mic care nu este evidențiat și apoi eliminați toate multiplii (numărul 5, ...).
- Repetați procesul până când ajungeți la întreaga parte a rădăcinii lui n .
Toate numerele rămase (până la n) sunt numere prime!
Functia
Acest tip de funcție poate fi modificat cu ușurință pentru a returna un număr întreg sau număr de lungă ... Codul este destul de lent pentru a fi executat, astfel încât ne vom limita la primele 1500 numere prime ...Funcția NbPremiers_Eratosthene (Rangă la fel de lungă) ca variantă"Verificați numărul n-lea folosind Sieve of Eratosthenes
Dim i Atâta timp, j Ca lungime, k În lungime, NbreMax As Long, Est_premier (), Flag As Boolean
Dacă Rang> = 1 și Rang <= 1500 Apoi
ReDim Păstrați est_premier (Rang)
k = 0
NbreMax = 20 * Rang "suflet pour un rang <1500
Flag = Adevărat
Pentru i = 2 Pentru NbreMax
Pentru j = 2 Pentru i
Dacă j = i Apoi ieșiți pentru
Dacă i Mod j = 0 Apoi Flag = False: Ieșiți pentru
Următor →
Dacă este Flag = True atunci
Dacă i = 2 Apoi
est_premier (k) = 1
k = k + 1
altfel
est_premier (k) = i
k = k + 1
Terminați Dacă
altfel
Flag = Adevărat
Terminați Dacă
Dacă k = Rang, apoi ieșiți pentru
Apoi eu
NbPremiers_Eratosthene = est_premier (Rang - 1)
altfel
NbPremiers_Eratosthene = "Rang trop grand ou trop petit (cuprinde 1 și 1500 inclus)."
Terminați Dacă
Terminați funcția
Invocând funcția
Există două metode:Cel de-al nouăsprezecelea număr
Sub Test ()"Pentru a obține numărul 499:
MsgBox NbPremiers_Eratosthene (499)
End Sub
Obțineți lista primelor 99 de numere prime
Sub ListeNbPrems ()'Obțineți o listă cu primele 99 de numere prime
Dim timp la fel de lung, Msg ca șir, Tb (98)
Pentru i = 1 până la 99
Tb (i-1) = NbPremiers_Eratosthene (i)
Apoi eu
MsgBox Tb (0) & "" & Tb (1) & "" & Tb (2) & "..." & Tb (UBound (Tb))
End Sub