Autor Beitrag
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Mo 22.04.13 22:07 
user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:

Mein Maximum liegt bei ca 12.884.901.890 Millarden.. somit kann ich maximal alle Primzahlen bis 12,8 Milliarden errechnen.. mit der Optimierung dass ich nur "ungerade" zahlen verwende (+1 wegn der 2) dann käm ich bis ca 25 Milliarden..

ohne Optimierung kann ich (wie vorrausgesagt) bis ca 12,5 Mrd. die Primzahlen berechnen !

Es gibt bis 12 Mrd 541.555.851 Primzahlen
kann das mal wer nachprüfen ob das stimmt?

Edit: die abgespeicherte Datei mit allen 541 Mio Primzahlen ist ca 6,08 GB groß.. OpenOffice, Word, Editor.. alle versagen :( kennt wer ein prog. das solch RIESEN Dateien "einigermaßen schnell" öffnen kann?

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1448

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mo 22.04.13 23:02 
Hallo,
user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
Es gibt bis 12 Mrd 541.555.851 Primzahlen
kann das mal wer nachprüfen ob das stimmt?

Genau wird heute abend nicht mehr. Aber für den Integrallogarithmus ergibt sich
Li(12000000000) = 541562074
d.h. etwa der Wert. Mit der zuerwartenden Abweichung wird es also wohl stimmen.

Beste Grüße
Mathematiker

Nachtrag: Ich habe 541555852 beim exakten Sieben gezählt. Ist bei Dir die 2 dabei?

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Di 23.04.13 09:47 
Hallo,

schade das user profile iconGammatester mit seinem Primepi32 nur bis Longint kommt.
www.entwickler-ecke....eration&start=20 und in seiner Multipräzisions-Arithmetik integriert.
Das müßte sich doch auf 64-Bit erweitern lassen.

Gruß Horst
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: Di 23.04.13 10:39 
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Das müßte sich doch auf 64-Bit erweitern lassen.
Ja es läßt sich auf 64-Bit erweitern (die Hauptbremse wäre die Legendre-Funktion lsumphi), obwohl wahrscheinlich die Rechenzeit dramatisch ansteigen wird, 'execution time balloons to several hours near 1e15 or 1e16' wie Thomas R. Nicely für seinen C-Code schreibt.

In der Zwischenzeit (bis Horst_H das optimiert hat :wink:), kann man statt Li(x) die Funktion RiemannR(x) aus meinen Speziellen-Funktionen benutzen, die etwas bessere Werte liefert, zB für x=12e9: Mathematiker-Sieb 541555852, RiemannR 541556725, Li 541562075.

Gruß Gammatester

Edit: Bevor die Beiträge eh zusammengefaß werden:
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Nachtrag: Ich habe 541555852 beim exakten Sieben gezählt. Ist bei Dir die 2 dabei?
Dann haben Du bzw. Dein Sieb sich wohl verzählt, denn www.primefan.ru/stuff/primes/10(07)11.txt und Wolfram Alpha sagen PrimePi(12E9) = 541555851
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Di 23.04.13 13:22 
user profile iconMathematiker hat folgendes geschrieben:

Nachtrag: Ich habe 541555852 beim exakten Sieben gezählt. Ist bei Dir die 2 dabei?

ja ALLE Primzahlen bis 12 Milliarden...

danke für die Seiten user profile iconGammatester :), ich rechne gerade Primzahlen bis 13,5 Milliarden aus, da die Grenze bei Delphi scheinbar zwischen 1,5 und 1,6 GB liegt... weiß der Geier warum ... kann mir bitte jemand mal die Antwort vom Geier nennen?

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Di 23.04.13 14:43 
.. ich habe bei mir einen Fehler in der Berechnung bemerkt !

Als der Fehler (noch) drin war, habe ich folgende Ergebnisse gehabt:

Bis 12 Mrd gibt es 541.555.851 Primzahlen
Bis 13,5 Mrd gibt es 606.022.680 Primzahlen

nach den "Tabellen" sind diese Angaben richtig !

Ich werde das ganze nochmal "ohne" den Fehler berechnen und schauen ob ich Glück gehabt habe, das bei solch kleinen Zahlbereichen (bis 15 Mrd) der Fehler noch nicht in Kraft getreten ist, aber eigentlich müsste sich der Fehler ab ca 4Mrd +8 zeigen..

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Di 23.04.13 14:54 
Hallo,

da wollte user profile iconGammatester mich wohl foppen ;-)
Ich habe mal seine Version etwas modifiziert, ohne das ganze "Gedöhns" seiner umfangreichen Ganzzahlarithmetik drumherum.Dadurch natürlich wesentlich langsamer, denn ich wollte diesen rückwärts Index nicht ala PrimIndex16(4)= 2.
Wollte ich das für die Primzahlen bis 1e9 machen, hätte ich keinen Speicher dafür.
Also schätze ich den Index ab Pi(x)= Index ~ sqrt(x)/(ln(sqrt(x))-1.08366) und suche dann in den Primzahlen, entsprechen rauf oder runter.
Als anderes wäre mir noch eingefallen, eine Tabelle für 65536 Zahlen ( X shr 16 ) mit dem Index ins Primzahlen Feld und dann linear mit (X MOD 65536) zu interpolieren und dann suchen. ( Tabelle[0]= 1,Tabelle[1] = 6542, )
Etwas lahm:
ausblenden Quelltext
1:
Lehmer:   WE mit lsumphi32 [s]: 00:00:01.611    PrimePi(12000000000) = 541555851					

Natürlich hätte ich für kleine X Primes16Index behalten können, das wird am häufigsten gebraucht.

Gruß Horst
EDIT:
Neue Version das bringt doch einiges...
ausblenden Quelltext
1:
Lehmer:   WE mit lsumphi32 [s]: 00:00:00.779    PrimePi(12000000000) = 541555851					


Ich habe vergessen zu sagen es Funktioniert nur bis 1e12, wie Primes1E6 vermuten lässt
Aaaaahhhhhh Edit3:
Zu wenig Int64 eingesetzt, denn bei mehr als 2x1e9 Primzahlen gab es wunderliche Ergebnisse.Deshalb jetzt ein Test bis 1e12:
ausblenden Quelltext
1:
Lehmer:   WE mit lsumphi32 [s]: 00:00:33.719    PrimePi(1000000000000) = 37607912018					

Das passt.
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: Mathematiker
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: Di 23.04.13 15:41 
Sehr cool 8)
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:

Ich habe vergessen zu sagen es Funktioniert nur bis 1e12, wie Primes1E6 vermuten lässt

Es funktioniert auch darüber hinaus, wenn man ein Anpassungen vornimmt (FPC und D9+, Source im Anhang) und ein wenig Zeit hat, hier für den 10fachen Wert = 120 Milliarden
ausblenden Quelltext
1:
2:
3:
4:
C:\Download>prime_pi64.exe
PrimePi mit MPArith V  (c) 2012 Mathematiker/WE(Gammatester)
     78500   1000027
Lehmer:   WE mit lsumphi32 [s]: 00:00:25.560    PrimePi(120000000000) = 4904759399


Gruß Gammatester

Edit: Mist, zu spät.
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: Horst_H
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Di 23.04.13 15:48 
so, für alle die einige Probleme mit deinem Projekt haben..
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
testnum = 12*1000*1000*1000// [Fehler] prime_pi.dpr(21): Überlauf bei Konvertierung oder arithmetischer Operation
{also:} testnum = 12000000000// ist dasselbe, gibt kein fehler aus
//und
 Primes1E6 : array[1..NumPrimes1E6+8of DWord; //funktioniert nicht
DWord = LongWord // DWord existiert in Delphi7 nicht ?° also
 Primes1E6 : array[1..NumPrimes1E6+8of LongWord;
//und
c := Primes1E6Index(trunc(exp(ln(x)/3.0)+0.5)); //funktioniert nicht, da ln nur mit real zahlen rechnet, x aber int64 ist... also
c := Primes1E6Index(trunc(exp(ln(x/1)/3.0)+0.5)); (ln(x/1); //hier wird automatisch gecastet... sinnlos aber funktioniert^^

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Di 23.04.13 15:54 
Hallo,

Uups, wieso muss man das ausdrücklich umwandeln? Bei Freepascal 2.6.2 nicht.
Ist ja zum Glück aber auch nur ein kleines Problem, das user profile iconGammatester in seiner Version richtig gemacht hat.

Gruß Horst
P.S.
Alles sehr Offtopic ;-)
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1448

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 23.04.13 15:56 
Hallo Horst_H,
die Bestimmung der Primzahlanzahl ist superschnell. Starke Leistung! Genau das habe ich für int64 schon längere Zeit gesucht. Vielen Dank.

@IhopeonlyReader
Bei meinem Siebversuch bis 12 Milliarden habe ich wohl eine Primzahl "doppelt" gezählt. Entschuldigung.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Di 23.04.13 16:00 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
@IhopeonlyReader
Bei meinem Siebversuch bis 12 Milliarden habe ich wohl eine Primzahl "doppelt" gezählt. Entschuldigung.

Klar, kein Problem ;) Und wie gesagt, ich habe in meinem Sieb ebenfalls ein Fehler drin^^, ich rechne gerade nochmal bis 13,5 Milliarden aus... (scheint aber so, als wenn der fehler sich automatisch ausgeglichen hätte (const+1 = const) <- war so^^.. dadurch hat sich der Fehler scheinbar selbst behoben^^.. aber ich rechne lieber nochmal ohne fehler :D

Nachtrag:
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
P.S. Alles sehr Offtopic ;-)

Ich glaube wir sollten mal einen Mod? bitten ob er ab Seite 2 (meiner Unit Veröffentlichung) das ganze mal trennt in ein neues Topic namens "allg. Primzahlenprobleme"

Nachtrag 2:

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Bei meinem Siebversuch bis 12 Milliarden
wie lange hat dein Rechner dafür gebraucht?

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1448

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 23.04.13 17:50 
Achtung!
Beim Aufruf der von Gammatester angegebenen Seite
www.primefan.ru/stuff/primes/10(07)11.txt
meldet mein Virenscanner:
"Exploit:HTML/IframeRef.gen" Schwerwiegende Warnstufe!
Also entweder spinnt der Virenscanner oder irgendetwas läuft im Moment schief. Jahrelang gab's so etwas bei mir nicht und jetzt in wenigen Tagen das 2.Mal. :nixweiss:


Sorry, war eine Fehlmeldung. :autsch:

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein


Zuletzt bearbeitet von Mathematiker am Di 23.04.13 19:10, insgesamt 1-mal bearbeitet
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Di 23.04.13 18:01 
Also, die Endung .ru ist in dem Link schon höchst verdächtig. Eine rumänische Seite!!! Na, wenn das man nicht wieder ein Trojaner-Ding ist. ;)

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Di 23.04.13 18:02 
Zum Thema "ich habe ein Fehler eingebaut"

Fehlerbehebung (automatisch):
Ich habe ein 2D Array angelegt, um den Index weiterhin "vernünftig" angeben zu können, somit unterteile ich bei meinem Sieb die zu berechnenden Zahlen in Vmrd -Teile (4 Milliardener Schritte) somit geht das 1 BitBoolean Array (mit dem Index 0) von der Zahl 0 bis hin zur Zahl 4Mrd-1
da ich die Bytes voll ausnutzen wollte unterteilte ich das Array nicht in 4Mrd-Schritte sondern in (4Mrd+7)er Schritte...
instinktiv (oder glück :D) nutzte ich nun um herauszufinden in welchem "Teil" das BitBoolean liegt die Div variante mit VMrd+1 (also zB. 1Mrd div (VMrd+1) =0 also im Teil mit dem index 0)
Dies führt natürlich zu einem Fehler (theoretisch), da das 4 Mrd + 7 bit-boolean ja gar nicht im teil mit dem index 0 existiert, ABER ich habe ja zur Grundlage ein Byte und dieser besteht aus 8 Bits, da 4Mrd+7 nicht durch 8 Teilbar ist, bleibt 1 "ungenutztes" Bit.. dies wurde dadurch RICHTIG beschrieben und genutzt...

Wenn ich als Grundlage eine Zahl, die ein vielfaches von 8 ist, genommen hätte, hätte ich direkt eine exception erzeugt... So hatte ich glück.. ich habe nun alle (VMrd+1) durch ein VMrdD ersetzt (soll soviel heißen wie VMrd Divisor) dieser setzt sich nun folgender Maßen zusammen: VMrdD = VMrd + (VMrd mod 2);

Falls ihr euch fragt "nur weil man ungeschriebene bits nicht genutzt hat, soll dein Ergebnis falsch sein?"
so hier die Antwort: Nein, nicht direkt weil man ungeschriebene bits nicht nutzt, sondern weil die zahl VMdr ungerade ist!, denn ich setzte die Bytes auf 170 also 10101010 (gerade zahlen auf false, ungerade auf true) ist nun aber der Teil ungerade, so wird in jedem Teil, deren Index ungerade ist (1,3 ...) jede gerade zahl auf true und jede ungerade zahl auf False gesetzt..

Behebung: ich könnte jetzt natürlich VMdrD = VMdr + (VMdr mod 8 ) schreiben, um wirklich ALLE "erstellen" bits zu nutzen, da ich ich aber erstmal nur FEHLER vermeiden will, bringe ich es auf eine "gerade" zahl also mod 2 !

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Di 23.04.13 18:44 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:

meldet mein Virenscanner:
"Exploit:HTML/IframeRef.gen" Schwerwiegende Warnstufe!

Also die URL zeigt bei mir auf eine stinknormele Textdatei. Da ist kein bisschen html Code. Ich würde daher (falls der Fehler immer noch besteht) mal auf deinen PC tippen.
user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
Also, die Endung .ru ist in dem Link schon höchst verdächtig. Eine rumänische Seite!!! Na, wenn das man nicht wieder ein Trojaner-Ding ist. ;)

Und .ru ist natürlich Russland ;-)
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1448

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 23.04.13 19:01 
Hallo,
user profile iconjfheins hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:

meldet mein Virenscanner:
"Exploit:HTML/IframeRef.gen" Schwerwiegende Warnstufe!

Also die URL zeigt bei mir auf eine stinknormele Textdatei. Da ist kein bisschen html Code.

Nachdem ich per Hand alle(!) temporären Internetdateien gelöscht habe, gibt's bei mir auch keine Meldung mehr. Der Virenscanner hatte wohl doch nicht alles gelöscht.
Damit hat sich meine Warnung als Fehlmeldung erwiesen. Tut mir leid für die "Panikmache". :autsch:

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Di 23.04.13 19:36 
So, ich habe mein Programm nun soweit PERFEKTIONIERT, dass es alle Primzahlen bis ((4 Mrd+8)^2) -1 ausrechnen kann.. bis auf eine kleiner Ausnahme^^ Delphi7 erzeugt *32 Anwendungen, diesen wird nun einmal nicht mehr als 2 GB zur Verfügung gestellt, und diese 2GB müssen sich auch noch ALLE Programm teilen...
deshalb habe ich mich mal versucht zu informieren: www.3dcenter.org/art...e-address-aware-flag
somit komme ich nun "nur" auf 1,6 GB nutztbaren Arbeitsspeicher (ram) also 1,6*1024^3 *8 Booleans und somit "Werte" also bis 13,7 Milliarden, da ist bei mir Schluss.. so ist selbst bei Vollausnutzung (2GB) der Maximalwert bei 17,18 Mrd erreicht... (abgesehen davon, dass solche abgespeicherten Primzahlen.txt s 10 GB groß wären) ist mir das zu wenig...

was ich tun werde:
Optimierung auf:
1. UngeradenArray+2 so steht dann das erste Bit für folgende zahlen
BitNr (0-7) Zahl (wert)
0................1
1................3
2................5
3................7
4................9
5................11
6................13
7................15

Um auszurechnen welche zahl das bit eigentlich wiedergibt würde ich dann (BitNr+1)*2-1 = (BitNr+0.5)* 2 oder 2*BitNr +1
Um auszurechnen in welchem Bit die Zahl steht ensprechend (Zahl-1) div 2 bzw. Zahl div 2 (da DIV ja immer abrundet)

Ersparnis: 50% (Primzahlen bis max. 35 Mrd möglich, unter "normalen" Auslastungen nur bis 27 Mrd)

2. Nach der Berechnung bis VMrd (ein Teil), so "kürze" ich diesen..

Beispiel: aus dem 10 BitBooleans enthaltenenden Array von 0 bis 9
ArrayIndex steht für Zahl Wert
0................1................False //eigentlich True, wird aber am anfang direkt auf false gesetzt, da es ja keine Primzahl ist
1................3................True
2................5................True
3................7................True
4................9................False
5................11................True
6................13................True
7................15................False
8................17................True
9................19................True

wird ein neues Array, allerdings nicht aus booleans sondern aus Int64 (hier würde Byte reichen, aber es geht ja bis 16x10^18 hoch) zahlen
ArrayIndex Inhalt
0................3
1................5
2................7
3................11
4................13
5................17
6................19

das wird weiter auf den Abstand zur vorherigen primzahl gekürzt, so wird aus einem Int64 Array ein Word Array (16 Bit sollten reichen, oder wird ein Abstand>65535 bei zahlen bis 16x10^18 erreicht?).. vor der 3 wird die "2" jetzt als 1 Primzahl vorrausgesetzt (diese wird nicht errechnet sondern als bekannt vorgegeben)
ArrayIndex Inhalt
0................1
1................2
2................2
3................4
4................2
5................4
6................2

Gesamte Ersparnis (an Ram) ist abhängig von der Höhe der Primzahlen! in kleineren Bereichen gibt es viele Primzahlen und somit ist die Ersparnis hier gering (sogar negativ), in höheren Bereichen (wie 1 Milliarde) ist nur noch durchschnittlich jede 20te zahl eine Primzahl, da allerdings aus 1 Bit (boolean) zu 16 bits (word) werden, ist auch hier die Ersparnis gering ca 20% des gesamten Arbeitsspeichers
(Berechnung bis ca 42 Mrd. maximal möglich! bei "normaler" Auslastung nur bis 33 Mrd)

Und durch die 1ste Optimierung fällt kaum Rechenzeit hinzu, hier hingegen eine Beträchtliche kürzungszeit.. deshalb ist es fraglich die 2te Optimierung überhaupt durchzuführen

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!


Zuletzt bearbeitet von IhopeonlyReader am Di 23.04.13 21:29, insgesamt 1-mal bearbeitet
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Di 23.04.13 20:54 
user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
also bis 13,7 Milliarden, da ist bei mir Schluss.. so ist selbst bei Vollausnutzung (2GB) der Maximalwert bei 17,18 Mrd erreicht... (abgesehen davon, dass solche abgespeicherten Primzahlen.txt s 10 B groß wären) ist mir das zu wenig...

Wenn der Speicher zum Sieben nicht reicht, kann man auch eine Datei auf der Festplatte dazu verwenden. Bei einer Größe von z. B. 250 GB kannst Du die Zahlen bis zu zwei Billionen untersuchen. Bei größeren Dateien entsprechend mehr. Um die Festplattenzugriffe etwas zu reduzieren, kann man die Datei mit vorgesiebten Werten initialisieren (Primzahlen 2, 3, 5, 7). Je mehr Primzahlen, desto weniger Festplattenzugriffe, desto schneller. Danach die Primzahldatei auswerten (Primzahlen als Klartext in eine Textdatei wegschreiben und die riesige Datei wieder löschen).
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Di 23.04.13 21:32 
An Festplattenausweichung habe ich auch schon gedacht.. aber das würde das ganze natürlich nocheinmal EXTREM verlangsamen...
Aber eine Möglichkeit wäre es natürlich :)... würdest du mir allerdings helfen, wie ich eine Datei auf die Festplatte auslagere?

Nachtrag:

user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
z. B. 250 GB kannst Du die Zahlen bis zu zwei Billionen untersuchen

sogar bis und 250(Festplatte)*2(weil ich nur ungerade zahlen verwenden werde)*1024^3(GB->B)*8(Bit pro Byte) = 250*2*1024^3 *8 = 2^32 *10^3 (ca 4Billionen)
da eine Festplatte (HDD) allerdings nur 1/1000 bit(oder Byte?!)/s liest, würde dies aber schon bis 1 Milliarde ca. 10Min dauern (antatt max. 1min)

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!


Zuletzt bearbeitet von IhopeonlyReader am Di 23.04.13 21:47, insgesamt 1-mal bearbeitet