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