VBA Excel - Prime nummers

VBA Excel - Prime nummers

Invoering

De zeef van Eratosthenes is een algoritme waarmee we alle priemgetallen kunnen vinden tot een specifieke limiet ( n- de nummer). Dit omvat het doorlopen van alle getallen van 2 naar n, om te controleren of het actieve nummer een veelvoud is. Als het geen meervoud is, is het nummer een priemgetal.
  • Meer info over de zeef van Eratosthenes op Wikipedia: //en.wikipedia.org/wiki/Sieve_of_Eratosthenes

Het algoritme

Eerst moeten we een lijst maken van alle getallen tot NbreMax.
  • 1 is verwijderd.
  • Markeer 2 en elimineer al zijn veelvoud
  • Herhaal de bewerking voor nummer 3 .
  • Kies het kleinste niet-gemarkeerde nummer en elimineer vervolgens al zijn veelvouden (nummer 5, ...).
  • Herhaal het proces totdat u het gehele deel van de hoofdmap van n bereikt .

Alle overige nummers (maximaal n) zijn priemgetallen!

De functie

Dit type functie kan eenvoudig worden gewijzigd om een ​​integer- of een langgetaltype terug te geven ... De code is vrij traag om uit te voeren, dus we zullen ons beperken tot de eerste 1500 priemgetallen ...

 Functie NbPremiers_Eratosthene (Rang As Long) As Variant

'Controleer op het nde priemgetal met behulp van de Sieve of Eratosthenes

Dim i As Long, j As Long, k As Long, NbreMax As Long, est_premier (), Flag As Boolean

Als Rang> = 1 en bel <= 1500 dan

ReDim Preserve est_premier (Rang)

k = 0

NbreMax = 20 * Rang 'suffit pour un rang <1500

Vlag = waar

Voor i = 2 tot NbreMax

Voor j = 2 To i

Als j = i Then Exit For

If i Mod j = 0 Then Flag = False: Exit For

volgende

Als Flag = True Then

Als ik = 2 dan

est_premier (k) = 1

k = k + 1

Anders

est_premier (k) = i

k = k + 1

Stop als

Anders

Vlag = waar

Stop als

Als k = Rang dan Afsluiten voor

Volgende ik

NbPremiers_Eratosthene = est_premier (Rang - 1)

Anders

NbPremiers_Eratosthene = "Rang trop grand ou trop petit (omvat entre 1 et 1500 inclus)."

Stop als

Eindfunctie

De functie aanroepen

Er zijn twee methoden beschikbaar:

Het nde priemgetal

 Subtest ()

'Om het 499ste priemgetal te krijgen:

MsgBox NbPremiers_Eratosthene (499)

End Sub

Verkrijg de lijst met de eerste 99 priemgetallen

 Sub ListeNbPrems ()

'Krijg een lijst met de eerste 99 priemgetallen

Dim i As Long, Msg As String, Tb (98)

Voor i = 1 tot 99

Tb (i - 1) = NbPremiers_Eratosthene (i)

Volgende ik

MsgBox Tb (0) & "" & Tb (1) & "" & Tb (2) & "..." & Tb (UBound (Tb))

End Sub

Download link

Download de voorbeeldwerkmap hier: //cjoint.com/14au/DHfoihzPEV2.htm
Vorige Artikel Volgende Artikel

Top Tips