.. .. .. ..   ..
BlitzBasic > Codearchiv > MathematikAktuallisiert 30.05.2009

..  Primzahlen ermitteln - von Triton 
Dieses Programm ermittelt Primzahlen und schreibt sie fortlaufend in eine txt-Datei.
Da diese Datei ziemlich schnell sehr groß wird, sollte man es, wenn man mehr Primzahlen ermitteln will, so um schreiben, dass es die Zahlen etwa zu je 500.000 Stück in fortlaufend nummerierte Dateien schreibt. Es läuft relativ schnell, es gibt aber noch Optimierungspotenzial. Ist eine Primzahl ein Teiler der Zahl die man untersuchen will, so ist die Zahl keine Primzahl.
Die Grenze liegt bei 2^31, da hier die Zahlenbereichsbeschränkungen von BlitzBasic zum Tragen kommen. Dies könnte man jedoch mit den Stringrechenfunktionen umgehen.

;** Juni 2005
;** by Triton
;** www.silizium-net.de
;** High-Speed-Version
Graphics 400,300,32,2
AppTitle("Primzahlen")
zahl=3
endzahl=100003
If zahl Mod 2 = 0 Then zahl = zahl + 1
Global j=Sqr(endzahl)
Global a1,i,t2
Dim pz(j)

Print "Ermittle Primzahlen von "+Zahl+" bis "+endzahl+"."
Print "..."

DeleteFile("pz"+txt+".txt")
dat=WriteFile("pz"+txt+".txt")
CloseFile dat
dat=OpenFile("pz"+txt+".txt")
WriteLine dat,"2"
t1=MilliSecs()

For z1=3 To j Step 2
	If primzahlalt(z1) = 1 Then 
		pz(a1)=z1
		a1=a1+1
		WriteLine dat,z1
	End If
Next

While Not KeyDown(1)
If primzahl(zahl) = 1 Then
	WriteLine dat,Str(zahl)
	i=i+1
End If
;If i Mod 10000 = 0 Then Print zahl
If zahl>endzahl Then
	t2=MilliSecs()-t1
	WriteLine dat, i+a1+" Primzahlen gefunden."
	WriteLine dat,"Es hat "+t2+" ms gedauert."
	t1=MilliSecs()
	CloseFile dat
	stats()
End If
zahl=zahl+2
Wend

;---
Function stats()
Print i+a1+" Primzahlen gefunden."
Print "Es hat "+t2+" ms gedauert."
Print ""
Print "Bye."
WaitKey
End
End Function

;---
Function primzahl(zahl)
For i2=0 To a1-1			
	If (zahl Mod pz(i2) = 0) Then Return 0
Next
Return 1
End Function


;---
Function primzahlalt(zahl) 
For teiler=3 To Sqr(zahl) Step 2 
	If (zahl Mod teiler = 0) Then Return 0 
Next 
Return 1 
End Function