VBA Excel - Prime numuri
VBA Excel - Prime numuri
Ievads
Eratosthenes siets ir algoritms, kas ļauj mums atrast visus primāros numurus līdz noteiktam ierobežojumam ( n. Skaitlis). Tas ietver cilpas cauri visiem numuriem, sākot no 2 līdz n, lai pārbaudītu, vai aktīvais numurs ir vairākkārtējs. Ja tas nav vairākkārtējs, tad numurs ir galvenais numurs.- Vairāk informācijas par Eratosthenes sietu Wikipedia: //en.wikipedia.org/wiki/Sieve_of_Eratosthenes
Algoritms
Vispirms mums būs jānorāda visi skaitļi līdz NbreMax.- 1 tiek noņemts.
- Iezīmējiet 2 un likvidējiet visus tā daudzos
- Atkārtojiet operāciju skaitam 3 .
- Izvēlieties mazāko neizcelto numuru un pēc tam novērš visus tā daudzkārtņus (skaits 5, ...).
- Atkārtojiet šo procesu, līdz sasniedzat n skaitļa daļu.
Visi pārējie numuri (līdz n) ir pirmie numuri!
Funkcija
Šāda veida funkciju var viegli mainīt, lai atgrieztu Integer vai Long numuru tipu ... Kods ir diezgan lēns, lai to izpildītu, tāpēc mēs ierobežosim sevi ar pirmajiem 1500 primārajiem numuriem ...Funkcija NbPremiers_Eratosthene (Rang As Long) kā variants'Pārbaudiet, vai n-otrais galvenais numurs ir Eratosthenes siets
Dim i As Long, j Kā Long, k As Long, NbreMax As Long, est_premier (), atzīmējiet kā Būla
Ja Rang> = 1 un Rang <= 1500, tad
ReDim Preserve est_premier (Rang)
k = 0
NbreMax = 20 * Rang 'suffit pour un rang <1500
Flag = True
Par i = 2 uz NbreMax
Attiecībā uz j = 2 uz i
Ja j = i Pēc tam iziet
Ja i Mod j = 0 Tad atzīmējiet = False: Exit For
Nākamais
Ja karogs = True Tad
Ja i = 2 Tad
est_premier (k) = 1
k = k + 1
Vēl
est_premier (k) = i
k = k + 1
Beigas Ja
Vēl
Flag = True
Beigas Ja
Ja k = Rang tad iziet
Nākamais i
NbPremiers_Eratosthene = est_premier (Rang - 1)
Vēl
NbPremiers_Eratosthene = "Rang trop grand ou trop petit (iekļauts 1 un 1500 inclus)."
Beigas Ja
Beigu funkcija
Funkcijas aktivizēšana
Ir pieejamas divas metodes:Otrā galvenais numurs
Sub tests ()'Lai iegūtu 499. galveno numuru:
MsgBox NbPremiers_Eratosthene (499)
Beigt Sub
Saņemiet pirmo 99 primāro numuru sarakstu
Sub ListeNbPrems ()'Saņemiet sarakstu ar pirmajiem 99 primārajiem numuriem
Dim i As Long, Msg kā String, Tb (98)
Attiecībā uz i = 1 līdz 99
Tb (i - 1) = NbPremiers_Eratosthene (i)
Nākamais i
MsgBox Tb (0) & "" & Tb (1) & "" & Tb (2) & "..." & Tb (Ubound (Tb))
Beigt Sub