Sieb des Eratosthenes = Primzahlberechnung
zurück
Dieses Programm liefert die Primzahlen von 1 bis 2100000000
Hinter dem Befehl Berechnen steht der unten folgende Code . Der Code wurde
mit vielen Rem Kommentaren versehen. Sie können die rem Kommentare
herauswerfen und wahrscheinlich auch die Variable j streichen. Versuchen
Sie den Fehler bei der Print Ausgabe mit der Startzahl 1-5 zu eliminieren.
Sub Befehl1_Click ()
Cls
j = 1
-
Rem Zähler j für die ungeraden Zahlen die
keine Primzahlen sind
-
Rem ist wahrscheinlich überflüssig
m = text1.Text
-
Rem holt sich aus dem Textfeld1 die erste Zahl zum
Testen
If m / 2 = Int(m / 2) Then m = m - 1
-
Rem Falls diese Zahl ohne Rest durch 2 teilbar ist,
also eine gerade Zahl ist
-
Rem geht das Programm noch eine Zahl rückwärts
um eine ungerade Zahl zu bekommen
If text1.Text = "" Then m = 6
-
Rem Falls keine Startzahl eingegeben wurde wird die
Startzahl m = 6 vergeben.
For m = m To m + 1000 Step 2
-
Rem Hauptschleife
-
Rem Die nächsten 1000 ungeraden Zahlen in einer
Schleife durchlaufen lassen
-
Rem m ist die Variable für die ungeraden
Zahlen
-
f = 1
-
Rem f ist die Variable für die
Faktorentestung,
-
Rem m teilbar durch f oder nicht
-
n = m
-
Rem n = ist die Testzahl, bei der noch nicht klar
ist ob sie eine Primzahl ist
-
Do While f < Sqr(n)
-
Rem solange der Teiler f kleiner als die Wurzel
-
Rem aus der Testzahl n ist, muß getestet
werden
-
f = f + 2
-
Rem Teiler von f = 1 beginnend um jeweils 2 vermehren
, 3,5,7,9 etc erster Test also mit f = 3
-
Do While n / f = Int(n / f)
-
Rem Teiler f testen solange
bis n / f ohne Rest teilbar
-
Rem Print "m = "; m; " n = "; n; " f = "; f; "j =
"; j
-
Rem Wenn Sie bei der letzten Zeile das Rem herauswerfen
,
-
Rem erkennen Sie die Bedeutung der Variablen
-
j = j + 1
-
Rem j ist ein Zähler
für die ungeraden Zahlen die keine Primzahlen sind
-
Rem j ist wahrscheinlich überflüssig
-
n = Int(n / f)
-
Rem Die Testzahl n verkleinern auf die Zahl n/f
-
Loop
A$ = " 1" + Chr(13) + " 2" + Chr(13) + " 3"
If m < 7 Then Print A$
-
Rem Chr(13) = Zeilenwechsel
-
Rem Am Anfang zwischen
1 und 5 gibt es Probleme mit der Ausgabe
-
Rem deswegen werden die ersten drei Zeilen ersetzt
durch A$
If n = m Then b = b + 1: Print n: text1.Text = n
-
Rem Wenn die Testzahl
n nicht teilbar war durch f
-
Rem ist es eine Primzahl und kann ausgedruckt
werden
If b = 30 Then m = m + 1000
-
Rem b ist die
Zeilennummer,
-
Rem bis Zeile b = 30 werden die berechneten Primzahlen
ausgegeben
-
Rem bei Zeile 30 wird die Schleife abgebrochen,
-
Rem da m größer als m + 1000 gesetzt
wird
-
Rem wenn ihr Bildschirm die Zahlen nicht mehr komplett
anzeigt
-
Rem können Sie für b einen anderen Wert
als 30 nehmen
Next m
-
Rem Hauptschleife durchlaufen ,
-
rem wieder Start am Beginn der Hauptschleife
End Sub