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

Lejupielādes saite

Lejupielādējiet parauga darbgrāmatu šeit: //cjoint.com/14au/DHfoihzPEV2.htm
Iepriekšējais Raksts Nākamais Raksts

Top Padomi