.K.I.L.L.U.A.
Neuling
Vor einiger Zeit habe ich ein Programm geschrieben, welches die Primzahlen von 2 bis [selbstbestimmbar] ausrechnet.
Dabei wurde ein von mir ausgedachter unglaublich ineffizienter Algorithmus verwendet .
Das Programm testet einfach alle Zahlen bis n ob diese durch ihre Vorgänger teilbar sind.
D.h. bei der Zahl 10 muss 8 mal auf Teilbarkeit mit den Vorgängern geprüft werden (bzw. sollte ein Teiler gefunden werden wird natürlich zur nächsten Zahl übergegangen, da die Zahl keine Primzahl ist).
--> bei 1000 muss 998 mal geprüft werden (wenn Primzahl)
--> bei 1000000 muss 999998 mal geprüft werden (wenn Primzahl)
edit: der bench testet jetzt nur noch auf Teilbarkeit durch ungerade Zahlen, da ungerade Zahlen (jede Primzahl ist eine ungerade Zahl) nie durch gerade Zahlen teilbar sind.
Dieser Zusammenhang ist expotentionel wenn nicht sogar überexpotentionel.
Also hab ich mir gedacht, dass man das Programm doch ganz gut als Bench missbrauchen kann wenn man die benötigte Zeit misst.
Da nur ein Kern genutzt wird bleiben Dual/Quadcore-Systeme ansprechbar.
Hier mal ein paar Beispiele mit prim_3.0 (sys siehe sig):
n___________Zeit in s
100.000------3,33607
200.000-----11,08632
Sagt mir mal was ihr davon haltet.
.Net Framework 3.5 sollte installiert sein.
das kriegt ihr von hier: http://www.microsoft.com/downloads/...fd-ae52-4e35-b531-508d977d32a6&DisplayLang=de
oder hier:
das web-setup bei Mediafire http://www.mediafire.com/?gtaxsjijmey
oder hier:
den Installer komplett http://winfuture.de/downloadstart,1210202238,2059.html thx -mxp-
bei Rapidshare:
dotnetfx35.part1.rar
http://rapidshare.com/files/115886232/dotnetfx35.part1.rar.html
dotnetfx35.part2.rar
http://rapidshare.com/files/115892208/dotnetfx35.part2.rar.html
dotnetfx35.part3.rar
http://rapidshare.com/files/115892725/dotnetfx35.part3.rar.html
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Die Versionen:
alt:
neu:
prim_3.2 -> nutzt einen verbesserten Algorithmus (thx Hiradur für den Hinweis ... obwohl ich mir das auch schon überlegt hatte ), unterstützt Dualcore- und Quadcoreprozessoren und legt eine Datei (alle_primzahlen_geordnet.txt) mit allen berechneten Primzahlen in der richtigen Reihenfolge an
Meine Bemühungen tragen nun endlich Früchte. Das hat mich ganz schön Nerven gekostet. Aber jetzt bin ich einfach nur froh es geschaft zu haben.
prim_3.2 nutzt 4 Threads zum Berechnen der Primzahlen. Und gibt diese in die Dateien output1.txt, output2.txt, output3.txt und output4.txt aus und legt eine Datei namens: alle_primzahlen_geordnet.txt an. In der ... wer hätte es gedacht ... allen berechneten Primzahlen in der richtigen Reihenfolge und die benötigte Zeit eingetragen sind.
->>> ist doppelt bzw. viermal (dualcore bzw. quadcore) so schnell wie prim 1.0 bzw. prim4
->>> ist schneller als prim_3.1 durch einen verbesserten Algorithmus
Die SDL.dll (wird mitgeliefert) muss im selben Ordner wie prim_3.2 sein oder im system32-Ordner.
n kann max. 4.294.967.295 sein ... für 5.000.000 hat mein rechner schon über 2h gebraucht (da war aber noch kein multithreading implementiert)
Kann aber auch problemlos auf
[int64 unsinged] = 18.446.744.073.709.551.615 bzw.
[int128 unsinged] ≈ 3,40282*10^38
erhöht werden ... wenn der Arbeitsspeicher nicht ausgeht ;P (ab Version 3.0, da erst da ein Array implementiert ist)
Tipp: Für große n ist das Programm gut für Stabilitäts- und Temperaturtests zu gebrauchen, da alle Kerne zu 100 % ausgelastet werden
Viel Spass beim ausprobieren ^_^.
edit2:
prim_3.3 ist da !!!
Hab meinem Programm eine Benutzeroberfläche spendiert.
Leider konnte ich dann den Intel-compiler nicht mehr nutzen, der brachte aber auch keine Vorteile.
Aus unbekannten Gründen (wahscheinlich wegen der Benutzeroberfläche(Form-Projekt)) ist das Programm um den Faktor 11 langsamer als prim 3.2.
Die Threads werden jetzt per .Net-funktion initialisiert.
Download:
Dabei wurde ein von mir ausgedachter unglaublich ineffizienter Algorithmus verwendet .
Das Programm testet einfach alle Zahlen bis n ob diese durch ihre Vorgänger teilbar sind.
D.h. bei der Zahl 10 muss 8 mal auf Teilbarkeit mit den Vorgängern geprüft werden (bzw. sollte ein Teiler gefunden werden wird natürlich zur nächsten Zahl übergegangen, da die Zahl keine Primzahl ist).
--> bei 1000 muss 998 mal geprüft werden (wenn Primzahl)
--> bei 1000000 muss 999998 mal geprüft werden (wenn Primzahl)
edit: der bench testet jetzt nur noch auf Teilbarkeit durch ungerade Zahlen, da ungerade Zahlen (jede Primzahl ist eine ungerade Zahl) nie durch gerade Zahlen teilbar sind.
Dieser Zusammenhang ist expotentionel wenn nicht sogar überexpotentionel.
Also hab ich mir gedacht, dass man das Programm doch ganz gut als Bench missbrauchen kann wenn man die benötigte Zeit misst.
Da nur ein Kern genutzt wird bleiben Dual/Quadcore-Systeme ansprechbar.
Hier mal ein paar Beispiele mit prim_3.0 (sys siehe sig):
n___________Zeit in s
100.000------3,33607
200.000-----11,08632
Sagt mir mal was ihr davon haltet.
.Net Framework 3.5 sollte installiert sein.
das kriegt ihr von hier: http://www.microsoft.com/downloads/...fd-ae52-4e35-b531-508d977d32a6&DisplayLang=de
oder hier:
das web-setup bei Mediafire http://www.mediafire.com/?gtaxsjijmey
oder hier:
den Installer komplett http://winfuture.de/downloadstart,1210202238,2059.html thx -mxp-
bei Rapidshare:
dotnetfx35.part1.rar
http://rapidshare.com/files/115886232/dotnetfx35.part1.rar.html
dotnetfx35.part2.rar
http://rapidshare.com/files/115892208/dotnetfx35.part2.rar.html
dotnetfx35.part3.rar
http://rapidshare.com/files/115892725/dotnetfx35.part3.rar.html
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Die Versionen:
alt:
Code:
Beide Programme laufen [U]doppelt so schnell wie prim2[/U] und geben die Primzahlen + die benötigte Zeit in die erzeugte output.txt aus.
[B][U]prim4:[/U][/B]
-Prüft zuerst alle ungeraden Zahlen z mit z= 3 + 4x / x Element N+ mit 0 / z<=n und gibt die Primzahlen + die 2 aus,
-dann werden alle ungeraden Zahlen z mit z=5 + 4y /y Element N+ mit 0 / z<=n geprüft und die Primzahlen ausgegeben.
|
v
nur zum rumprobieren (noch kein Multithreading implementiert) -> gibt die Zahlen nicht in der richtigen Reihenfolge aus
[B][U]prim 1.0:[/U][/B]
prüft einfach alle ungeraden Zahlen z mit z= 3 + 2v / v Element N+ mit 0 / z<=n und gibt die Primzahlen + die 2 aus.
|
v
gibt die zahlen in der richtigen Reihenfolge aus.
prim_2.0 -> unterstützt Dualcoreprozessoren
prim_3.0 -> unterstützt Dualcore- und Quadcoreprozessoren
prim_2.0 --->>> [url]http://www.mediafire.com/?vn5mnandnst[/url] 180kb
prim_3.0 --->>> [url]http://www.mediafire.com/?1s4wmr134gm[/url] 180kb
prim_3.1 --->>> [url]http://www.mediafire.com/?0mwilgipltc[/url] 181kb
prim_3.2 --->>> [url]http://www.mediafire.com/?cf98xd9iz3k[/url] 261.49 KB
neu:
prim_3.2 -> nutzt einen verbesserten Algorithmus (thx Hiradur für den Hinweis ... obwohl ich mir das auch schon überlegt hatte ), unterstützt Dualcore- und Quadcoreprozessoren und legt eine Datei (alle_primzahlen_geordnet.txt) mit allen berechneten Primzahlen in der richtigen Reihenfolge an
Meine Bemühungen tragen nun endlich Früchte. Das hat mich ganz schön Nerven gekostet. Aber jetzt bin ich einfach nur froh es geschaft zu haben.
prim_3.2 nutzt 4 Threads zum Berechnen der Primzahlen. Und gibt diese in die Dateien output1.txt, output2.txt, output3.txt und output4.txt aus und legt eine Datei namens: alle_primzahlen_geordnet.txt an. In der ... wer hätte es gedacht ... allen berechneten Primzahlen in der richtigen Reihenfolge und die benötigte Zeit eingetragen sind.
->>> ist doppelt bzw. viermal (dualcore bzw. quadcore) so schnell wie prim 1.0 bzw. prim4
->>> ist schneller als prim_3.1 durch einen verbesserten Algorithmus
Die SDL.dll (wird mitgeliefert) muss im selben Ordner wie prim_3.2 sein oder im system32-Ordner.
n kann max. 4.294.967.295 sein ... für 5.000.000 hat mein rechner schon über 2h gebraucht (da war aber noch kein multithreading implementiert)
Kann aber auch problemlos auf
[int64 unsinged] = 18.446.744.073.709.551.615 bzw.
[int128 unsinged] ≈ 3,40282*10^38
erhöht werden ... wenn der Arbeitsspeicher nicht ausgeht ;P (ab Version 3.0, da erst da ein Array implementiert ist)
Tipp: Für große n ist das Programm gut für Stabilitäts- und Temperaturtests zu gebrauchen, da alle Kerne zu 100 % ausgelastet werden
Viel Spass beim ausprobieren ^_^.
edit2:
prim_3.3 ist da !!!
Hab meinem Programm eine Benutzeroberfläche spendiert.
Leider konnte ich dann den Intel-compiler nicht mehr nutzen, der brachte aber auch keine Vorteile.
Aus unbekannten Gründen (wahscheinlich wegen der Benutzeroberfläche(Form-Projekt)) ist das Programm um den Faktor 11 langsamer als prim 3.2.
Die Threads werden jetzt per .Net-funktion initialisiert.
Download:
Anhänge
Zuletzt bearbeitet: