Autor Beitrag
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Di 14.04.15 15:36 
Hallo,

Auch auf Rosetta Code gibt es auch ein paar interessante Probelmstellungen, wie zum Beispiel Emirp Primes.
Ich habe das auch probiert mit Free Pascal/Linux mittels Bit-Sieb welches nach 146s in etwa 2,5 Gb alle Primzahlen bis 1e11 bereithält.Es gibt zwar Programme die sehr viel schneller Primzahlen sieben 6.63s mit threading auf i7 4x 3.4 Ghz , aber die sind dann auch wieder weg.
Durch die Spiegelung von 1000000003 -> 3000000001 und 4 weiter 1000000007 -> 7000000001 liegen die zu testenden Zahlen immer extrem weit auseinander und mir fällt nicht ein, wie man das entscheidend verbessern könnte.
Veielleicht ist auch der Erstellung der Spiegelung zu lahm.Man könnte dort vielleicht ausnutzen, das zwei aufeinanderfolgende Primzahlen nicht weit aus einandersind und so ein Großteil der Ziffern auch in der Spiegelung erhalten bleiben.Das scheint mir ein wesentlicher Grund zu sein, warum die 32-Bit Version doppelte solange nach Emirps suchen muss, als die 64-Bit Version.
Ich hoffe auf ein paar zündende Ideen,

Gruß Horst
P.S:
Den Code wollte ich hier nicht doppelt posten, er steht ja bei rosetta.
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Fr 17.04.15 00:11 
Hallo Horst_H,

ich denke, am Code kann man einiges tunen, da sind bestimmt 10% drin, aber an mehr als 50% glaube ich nicht.

Den Algorithmus durchblicke ich nicht. Aber es ist doch so: Bei jeder Primzahlensuche werden eine Unmenge von Nicht-Primzahlen getestet und aussortiert. Wenn man (im höheren Zahlenbereich) endlich die nächste Primzahl gefunden hat, dann ist doch die Rechenzeit für die Umkehrung und den Test, ob das auch eine Primzahl ist, vermutlich vernachlässigbar klein. Und davon macht doch die Umkehrung der Ziffernfoge auch nur die geringste Arbeit aus. Bei der Umkehrung kann es doch somit kein nenenswertes Potenzial geben

Nutze doch mal einen Profiler, um zu sehen, wo die Zeit verbraucht wird. Bei sehr kurzen Prozeduren/Funktionen ist Vorsicht geboten, weil der Profiler u. U. mehr Zeit verbrauchen kann als der eigentliche Code. Ich nutze seit sehr vielen Jahren regelmäßig diesen hier: www.prodelphi.de/. Für das aktuelle Problem sollte die sogar die Freeware-Version ausreichen.

Gruß
GuaAck
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 601
Erhaltene Danke: 339

W7
Delphi 6 pro
BeitragVerfasst: Fr 17.04.15 14:13 
Moin Horst_H,
eine schöne Anwendung fürs Primzahlsieb und schnell.
Für das Spiegeln einer Zahl ist mir noch nichts schnelleres eingefallen,
für das Überprüfen der Spiegelzahl könnte eventuell eine Hashtabelle nützlich sein oder binäre Suche im Sieb.
Meine Variante arbeitet ohne Sieb, es können bis zu 18-stellige Zahlen untersucht werden(Geduld ist gefragt),
die Anzahl der zu testenden Zahlen wird festgelegt.
user defined image
Ich arbeite mit Delphi6 pro, Datentyp ist extended
Gruß Fiete

p.s.
1000000003
Keine Primzahl, Teiler sind
23 und 43478261

3000000001
Keine Primzahl, Teiler sind
7589 und 395309
Einloggen, um Attachments anzusehen!
_________________
Fietes Gesetz: use your brain (THINK)