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

Descărcați linkul

Descărcați manualul de probă aici: //cjoint.com/14au/DHfoihzPEV2.htm
Articolul Precedent Articolul Următor

Cele Mai Importante Sfaturi