Feedback

Das Sieb des Eratosthenes

Sprache: VB

Diese Funktion berechnet alle Primzahlen < n. Als Optimierung habe ich gerade Zahlen übersprungen. Alternativ können die gefundenen Zahlen auch in einer Liste gespeichert werden, welche dann zurückgegeben wird. Mehr zum Sieb: http://de.wikipedia.org/wiki/Sieb_des_Eratosthenes [u]Sieve of Eratos.[/u]: 664579 primes < 10^7 computed in [b]00:01.3361552[/b] [u]Sieve of Eratos.[/u]: 5761455 primes < 10^8 computed in [b]00:23.7904888[/b] mm:ss.ms [b]Zum Vergleich[/b]: http://dotnet-snippets.de/dns/effizientere-primzahlpruefung-grosser-zahlen-SID1373.aspx
Sub eratos(ByVal l As Integer)
    Dim primes(l) As Boolean

    For i As Integer = 3 To Math.Sqrt(l) Step 2
        For j As Integer = i * i To l Step i
            primes(j) = True
        Next
    Next

    Console.WriteLine(2)
    For i = 3 To l Step 2
        If Not primes(i) Then Console.WriteLine(i)
    Next
End Sub
Sub eratos(ByVal l As Integer)
    Dim primes(l) As Boolean

    For i As Integer = 3 To Math.Sqrt(l) Step 2
        For j As Integer = i * i To l Step i
            primes(j) = True
        Next
    Next

    Console.WriteLine(2)
    For i = 3 To l Step 2
        If Not primes(i) Then Console.WriteLine(i)
    Next
End Sub

4 Kommentare

  1. Das Sieb von Atkin ist eine Optimierung des Sieb des Eratosthenes. Auch das wird bald als Snippet von mir hier veröffentlicht.

  2. Der Code wurde sichtlich entschlankt. Durch Verwendung eines Arrays anstatt einer Liste entfallen das Hinzufügen aller boolschen Werte und das Negieren jener geraden.

    Die While-Schleife wurde durch eine For-Schleife ersetzt, was ebenfalls ein paar Zeilen einspart.