Priemgetallen zoeken (eratosthenes zeef)
Auteur: Thomas - 27 augustus 2004 - 14:48 - Gekeurd door: Dennisvb - Hits: 10412 - Aantal punten: 4.19 (8 stemmen)
Met behulp van eratosthenes zeef worden alle priemgetallen uit een interval [2..n] 'gezeefd'. Dit werkt als volgt:
Gegeven een getal n (>1), de lijst L [2, ..., n], de lege lijst P
doe, zolang L niet leeg is
g is het kleinste getal in de lijst L
voeg dit getal toe aan P
verwijder alle veelvouden van g uit L
einde doe
Na afloop is dus L leeg, en bevat P alle priemgetallen uit het interval [2..n]
Bij onderstaande implementatie is gebruik gemaakt van het feit dat elk getal is opgebouwd uit priemgetallen.
Mogelijke optimalisatie:
Je zou alleen priemgetallen hoeven te controleren die kleiner zijn dan of
gelijk zijn aan de wortel van het te controleren getal, immers als je geen
getal a hebt zodat
g = a*b en a <= wortel(g)
dan is er ook geen getal b zodat
g = a*b en b >= wortel(g)
Mogelijke uitbreiding:
Als je wat grotere priemgetallen wilt gaan berekenen zal je een mechanisme
moeten bedenken waarbij eerder berekende priemgetallen worden opgeslagen, en
weer worden opgehaald op het moment dat je wilt bepalen of een bepaald getal
een priemgetal is.
|