Autor Beitrag
Goolix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83



BeitragVerfasst: Mi 06.10.04 19:16 
also hier mein erklärtes ziel:

ich würde gerne ein programm schreiben, dass zahl für zahl durchgeht (also zählt), diese überprüft, ob es eine primzahl ist und falls ja, die zahl in eine neue zeile von einer externen datei schreibt.

dem primzahlencheck werd' ich selbst schreiben...

ich weiß auch, wie mein etwas in eine datei schreibt.

nun 3 Fragen...


a) wie veranlasse ich das programm, jede primzahl in eine eigene zeile zu schreiben
b) wie kann ich die letzte zeile einer textdatei in meinem programm aufrufen (speicherfunktion)

c) die Wichtigste frage: wie kann ich so große zahlen benutzen... mit großen zahlen, meine ich welche, mit mehreren millionen stellen...
sourcehunter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 482

Win XP | Suse 10.1
Delphi 2005 Pers.
BeitragVerfasst: Mi 06.10.04 20:20 
a) Datei als Textdatei nehmen und dann ein WriteLn
b) Wie meinst du das?
c) Dafür musst du die Behandlungsroutinen selber schreiben. Am Besten merkst du dir die Ziffern der Zahl in einem Array.

_________________
Linux und OpenSource rulez!
Gast
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 06.10.04 20:36 
Goolix hat folgendes geschrieben:
a) wie veranlasse ich das programm, jede primzahl in eine eigene zeile zu schreiben
WriteLn() - wie schon vom Vorredner erwähnt.
Goolix hat folgendes geschrieben:
b) wie kann ich die letzte zeile einer textdatei in meinem programm aufrufen (speicherfunktion)
Um dort fortzufahren? Verstehe die Frage nicht.
Goolix hat folgendes geschrieben:
c) die Wichtigste frage: wie kann ich so große zahlen benutzen... mit großen zahlen, meine ich welche, mit mehreren millionen stellen...
Am besten du entwickelst einen eigenen Prozessor der deinen Anforderungen entspricht!
Goolix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83



BeitragVerfasst: Mi 06.10.04 20:46 
daraus schließe ich mal, dass mein projekt gescheitert ist?

also ist das rechnen mit solchen zahlen bei momentaner rechenleistung nicht möglich?
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 06.10.04 20:55 
Rechnen kann man mit solchen Zahlen schon mit heutiger Rechenleistung. Man muss sich nur überlegen, wie man die Zahlen verwaltet, und wie man die Rechenoperationen konkret umsetzt. Es gibt ja auch Projekte, die rechnen Pi aus. Ich glaube, die peilen grad die 500.000.000 Stellen an...

Das Problem ist, herauszufinden, ob diese Zahlen Primzahlen sind, oder nicht. Wie stellst du das denn an?
Naiv geht man ja so vor, dass man einfach alle Teiler bis zur Wurzel der Zahl durchgeht. Hat allerdings eine unpraktikable Laufzeit. Wenn man Zahlentheoretisch an die Sache rangeht, verwendet man bessere Primzahltests, wie z.B. Miller-Rabin. Geht schon schneller.

Und mehrere Millionen Stellen würde ich mir ganz aus dem Kopf schlagen. Ein paar tausend gehen vielleicht noch im privaten Bereich. Siehe dazu auch www.heise.de/newsticker/meldung/42567 . Wenn eine Primzahl mit 6 Millionen Stellen entdeckt wird, ist das immerhin eine (sogar zwei!) Meldung(en) bei Heise wert...

_________________
We are, we were and will not be.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Do 07.10.04 05:59 
Also so kompliziert würde ich das nicht sehen wollen. Es ist schon kompliziert aber keines Wegs unmöglich. Eher unpraktikabel auf einem Heimrechner.

Das einzige was du "lediglich" machen müsstest wäre einen neuen Datentypen und dessen Rechenoperationen zu implementieren. Und zwar einen Typen, der nicht auf einen Integer oder Int64 aufbaut. Sondern eher so etwas, was mit einem array of Byte vergleichbar wäre. Wie die Zahlen dort abgelegt sind sei erst einmal dahingestellt. Zum Beispiel in einem Byte repräsentieren die Werte von 00 bis 99 jeweils 2 Stellen in deiner Zahl. Bei den Operationen musst du jeweils immer 2 (oder ein paar mehr) Stellen benutzen und den Übertrag immer mit in die nächste Berechnung nehmen. Du würdest deine Berechnung sozusagen aufteilen und in einer Schleife berechnen. Was die Sache natürlich nicht schneller macht.

Was ich eher dabei befürchte, dass du auf einem herkömmlichen Rechner mehrere Minuten (wenn nicht sogar Stunden) oder so für die Berechnung einer einzellnen großen Primzahl benötigen würdest. Und wenn du dann eine Primzahl von solchem ausmaß ausrechnen möchtest, dann mal viel spaß.

Schau dir auch mal folgenden Artikel an. Gefunden bei google.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
minnime
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 171

Win 7
Delphi Prism 2011, C# (VS 2010)
BeitragVerfasst: Do 07.10.04 06:55 
Nur mal nebenbei gefragt. Wozu werden solche riesigen Primzahlen benötigt? Ich hab nicht mal eine Ahnung was man mit den Dingern überhaupt anfangen kann. Bei Pi versteht sich das schon eher, falls mal einer den Umfang einer Galaxie ausrechnen will oder so, aber Primzahlen, was kann man damit anfangen?
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Do 07.10.04 08:36 
minnime hat folgendes geschrieben:
Nur mal nebenbei gefragt. Wozu werden solche riesigen Primzahlen benötigt? Ich hab nicht mal eine Ahnung was man mit den Dingern überhaupt anfangen kann.

Das ist alles Spielerei.

minnime hat folgendes geschrieben:
Bei Pi versteht sich das schon eher, falls mal einer den Umfang einer Galaxie ausrechnen will oder so, aber Primzahlen, was kann man damit anfangen?

Und das ist genauso Spielerei, da wir ja schon festgestellt hatten, dass lediglich 40 Stellen reichen, um den Umfang des Universums auf die Größe eines Atom(kern)s genau zu berechnen.

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 07.10.04 08:38 
Lossy EX hat folgendes geschrieben:
Was ich eher dabei befürchte, dass du auf einem herkömmlichen Rechner mehrere Minuten (wenn nicht sogar Stunden) oder so für die Berechnung einer einzellnen großen Primzahl benötigen würdest. Und wenn du dann eine Primzahl von solchem ausmaß ausrechnen möchtest, dann mal viel spaß.

kommt drauf an, wie groß. Mehrere Millionen Stellen auf dem Heimrechner ist nicht möglich. Und man muss bei solchen Sachen auch die richtigen Algorithmen verwenden. Der naive Algorithmus geht da nicht. Warum? Weil: 10.000.000 Stellen ist eine Zahl wie 10^10000000. Das Alter unseres Universums: 10^17 Sekunden. Alle Teiler durchzutesten geht einfach nicht.
Zitat:
Zum Beispiel in einem Byte repräsentieren die Werte von 00 bis 99 jeweils 2 Stellen in deiner Zahl
Wenn ich sowas mache, dann nutze ich aber die Bytes voll aus. Ein Integer (4 Byte) kann ja auch mehr als 9999 darstellen...

@miniime: Kein Mensch "braucht" Pi so genau. Für den Umfang einer Galaxie? Wozu? Wie genau kannst du den Radius messen? - Siehst du.
Große Primzahlen werden bei verschiedenen Verschlüsselungsverfahren benutzt. Z.B. RSA-Verfahren. Bestimmt schonmal gehört. Der öffentliche key wird im Wesentlichen aus dem Produkt zweier sehr großer Primzahlen (ca. 500 Stellen) gebildet. Zum Entschlüsseln müßte man aber die beiden Primzahlen kennen. Klar, man kann einfach Faktorisieren, aber das ist schon in diesem Bereich in vernünftiger Zeit mit vernünftigen Mitteln nicht möglich. Und daher ist dieses Verfahren sehr sicher.

_________________
We are, we were and will not be.
Gast
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 07.10.04 08:42 
.Chef hat folgendes geschrieben:
minnime hat folgendes geschrieben:
Nur mal nebenbei gefragt. Wozu werden solche riesigen Primzahlen benötigt? Ich hab nicht mal eine Ahnung was man mit den Dingern überhaupt anfangen kann.

Das ist alles Spielerei.
Es sei denn ...

Nein, ich denke auch, daß das hier Spielerei ist. Und auch noch ziemlich unbedachte: mit "mehreren millionen stellen" :-/ *kopfschüttel* - da beissen sich große Projekte mit verteilten Rechenressourcen seit Jahren die Zähne an verschiedenen Sachen aus und du glaubst das mal so rauszubekommen. Daher auch meine Empfehlung eines eigens entworfenen Prozessors.

Primzahlzerlegung ist wichtig für Kryptographie, aber diese Dimensionen sind doch illusorisch für einen Heim-PC.

Nachtrag: Da fiel mir noch was anschauliches ein. Angenommen du würdest es schaffen ein paar wenige solcher Primzahlen in kurzer Zeit zu finden, dann würde dir in kürzester Zeit der Speicher ausgehen - und damit meine ich nicht nur RAM!


Zuletzt bearbeitet von Gast am Do 07.10.04 08:47, insgesamt 2-mal bearbeitet
minnime
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 171

Win 7
Delphi Prism 2011, C# (VS 2010)
BeitragVerfasst: Do 07.10.04 08:42 
Ja ja, die irren MAthematiker. Eigentlich meinte ich aber wozu man PRimzahlen überhaupt braucht, da wird doch schon in der Schule drauf eingegangen, jeder Sechstklässler weiß was eine Primzahl ist, aber wozu, dann muss man die ja für irgendwas gebrauchen können.
Bisher ist mir deren Anwendung nur aus der Kryptographie bekannt.
minnime
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 171

Win 7
Delphi Prism 2011, C# (VS 2010)
BeitragVerfasst: Do 07.10.04 08:44 
Ups, ich kam etwas spät
Adrian
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 314



BeitragVerfasst: Do 07.10.04 08:51 
Servus!

@minnime: Primzahlen an sich werden gerne zur Verschlüsselung verwendet, so z.B. beim Homebanking. Die ganz großen Primzahlen haben aber eher akademisches Interesse. So ist zwar die Frage, ob es eine größte Primzahl gibt mittlerweile mit "Nein" beantwortet, bei der Frage, ob es eine obere Grenze für Primzahlzwillinge gibt, ist noch offen.
Warum Du eine möglichst vielstellige Angabe von Pi zum Berechnen von Galaxienumfängen willst, kann ich nicht verstehen. Wenn ich den Durchmesser nur auf 100 Lichtjahre genau kenne, dann ist auch bei Pi mit 1000 Stellen der Umfang nur auf max. 100 Lj genau. Aus meiner Ausbildung: Hat man mehrere Ausgangsgrößen, darf das Resultat nur mit so vielen signifikanten Stellen angegeben werden, wie sie die Ausgangsgröße mit der kleinsten Stellenanzahl enthält. Also hat ein Tisch mit einem Durchmesser von 80 cm nicht einen Umfang von 2,5132741228718345907701147066236m, sondern 2,5m!
@Gausi: Im September 1999 von Yasumasa Kanada an der Universität Tokio der Wert Pi auf 206.158.430.000 Stellen genau berechnet. Wahrscheinlich ist aber der Wert schon längst wieder überboten.

Gruß,

Adrian

//edit
Um die nachfolgende Nachricht zu kommentieren:
Zitat:

<Pedanten-Modus>
2,51m! Hättest du 0,8m geschrieben, hättest du natürlich recht
</Pedanten-Modus>

<Ober-Pedanten-Modus>
Ein Tisch mit einer Durchmesserangabe von 80cm hat einen wahren Durchmesser im Bereich von 79,5000...cm bis 80,4999...cm.
Daraus resultiert ein wahrer Umfang zwischen 2,4975...m bis 2,52898...m.
Wie man daraus sieht, ist die Angabe des Umfangs mit 2,51m nicht richtig (und hätte damals auch einen Punktabzug zur Folge gehabt). :les:
</Ober-Pedanten-Modus>
Technikum Würzburg, Abschlußjahrgang 1994


Zuletzt bearbeitet von Adrian am Di 21.03.06 12:28, insgesamt 1-mal bearbeitet
Gast
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 07.10.04 08:54 
Adrian hat folgendes geschrieben:
wie sie die Ausgangsgröße mit der kleinsten Stellenanzahl enthält. Also hat ein Tisch mit einem Durchmesser von 80 cm nicht einen Umfang von 2,5132741228718345907701147066236m, sondern 2,5m!

<Pedanten-Modus>
2,51m! Hättest du 0,8m geschrieben, hättest du natürlich recht ;)
</Pedanten-Modus>
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 07.10.04 09:07 
Adrian hat folgendes geschrieben:
So ist zwar die Frage, ob es eine größte Primzahl gibt mittlerweile mit "Nein" beantwortet,

Mittlerweile ist gut. Das wußten schon die alten Griechen oder so. Ist ja auch nicht schwer einzusehen: Angenommen, es gäbe eine größte Primzahl. Dann kann man alle Primzahlen, die es gibt, miteinander multiplizieren, und dann noch eins draufaddieren. Diese Zahl kann durch keine der Primzahlen teilbar sein, und wäre somit sie auch eine Primzahl, was im Widerspruch zu der Annahme steht, dass man die größte schon gefunden hat. Wie amn sieht, keine hohe Mathematik.

Zu Pi: Da bin ich wohl etwas hinterher, wenn man schon vor 5 Jahren 200Milliarden Stellen hatte...

_________________
We are, we were and will not be.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Do 07.10.04 09:56 
Gausi hat folgendes geschrieben:
Zitat:
Zum Beispiel in einem Byte repräsentieren die Werte von 00 bis 99 jeweils 2 Stellen in deiner Zahl
Wenn ich sowas mache, dann nutze ich aber die Bytes voll aus. Ein Integer (4 Byte) kann ja auch mehr als 9999 darstellen...


Nicht ganz richtig. Wir würden 2 Stellen in einem Byte unterbringen. Also würden wir in diesem Falle mit 4 Bytes 99999999 darstellen können. Das ist natürlich immer noch wesentlich weniger als mit einem richtigen Integer. Allerdings lässt es sich so mit Sicherheit besser berechnen als wenn du in ein Byte 255 reinquetschen würdest. In diesem Fall könntest du zum Beispiel genau sagen, dass die Stelle X den Wert Y hat und müsstest nicht erst einmal die komplette Zahl durchsuchen und die genau Position und Wert ausrechnen. Das ist der Sinn der dahinter steckt. Dass dadurch natürlich Speicher verbraucht wird ist klar aber der Vorteil ist auch nicht von der Hand zu weisen. ;-) Das war aber auch nur eine Idee von meiner Seite. Wie man das im Endeffekt löst ist jedem selber überlassen.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Do 07.10.04 10:16 
Zitat:
Allerdings lässt es sich so mit Sicherheit besser berechnen als wenn du in ein Byte 255 reinquetschen würdest


Warum? Man rechnet einfach mit dem einem Zahlensystem, das vom Speicher her mit n Ziffern ein Byte völlig ausfüllt, also z.B. binär oder hexadezimal. Warum soll man sich auf das Dezimalsystem beschränken? Zur Ausgabe kannst du die Zahl ja dann umwandeln.

Cu,
UDontknow
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Do 07.10.04 10:38 
In der Mathematik wird normal Stellenweise gerechnet. Sofern ich das noch richtig in Erinnerung habe. ;-) Und ich sehe das Problem einfach darin, wenn man die 256 möglichen Werte eines Bytes voll ausschöpft, dass man zu viel berechen muss um überhaupt erst einmal herraus zubekommen welcher Wert die aktuelle Stelle hat. Also wenn man es so aufbauen würde wie ein normalen Integer. Dann müsste man erst einmal durch den kompletten Speicher um sagen zu können welchen Wert die aktuelle Stelle überhaupt besitzt. Denn da könnte es sein, dass ein Bit vorher mal eben fast die Hälfte des Wertes ausmacht etc. An der Stelle sollten wir aber nicht vergessen, dass wir rein theoretisch 3 Mio (oder mehr) Stellen haben könnten. Und mit dieser Trennung auf die einzellnen Stellen kann man sehr schnell und einfach (mod und div) die Zahl rekonstruiehren.

Bei Hex würde man zwar groß keinen Speicher verbrauchen man könnte aber auch nicht genau sagen welche Stelle welchen Wert hat ohne, dass man erst einmal aufwendig den Speicher durchsuchen müsste. Und das sollte man dabei tunlichst vermeiden. Zwecks der möglichen Größe.

Hoffe du versteht mein "Problem" jetzt? Aber wie gesagt. So würde ich es machen. Das ist natürlich nicht das Maß aller Dinge. Aber ich halte es für den einzig sinnvollen Weg.

PS: Lasse mich gerne eines Besseren belehren, wenn ich unrecht haben sollte.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Do 07.10.04 10:54 
Mein Vorredner hat absolut recht.

Es ist zwar nicht nur effektiver, sondern auch einfacher (Bitschieben!) mit "vollen" Bytes zu rechnen, nur die Anzeige im Dezimalsystem wird zum Steckschuss.

Udontknow hat folgendes geschrieben:
Zur Ausgabe kannst du die Zahl ja dann umwandeln.

Ich warte mit Freude auf die Routine, mit der du mal eben eine Million Dezimalstellen aus vollen Bytes anzeigst. ;-)

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 07.10.04 11:20 
Lossy Ex hat folgendes geschrieben:
In der Mathematik wird normal Stellenweise gerechnet. Sofern ich das noch richtig in Erinnerung habe.
In der Mathematik wird gar nicht gerechnet. Rechnen ist Numerik, und das ist bekannterweise die dunkle Seite der Macht -äh- Mathematik. :lol:
Außerdem: Was ist ein Stelle? Das hängt doch vom Zahlensystem ab! Im Zehnersystem hat die Zahl 15 zwei Stellen, im 16er-System nur eine: A - im Binärsystem dagegen 4, nämlich 1111. Intern wird im 2erSystem gerechnet. Wenn wir mit vollen Bytes arbeiten, wäre das ein 256erSystem. Die Umrechnung von 256 auf 2 ist wesentlich einfacher als von 10 auf 2 oder umgekehrt. Andernfalls hätte mit Sicherheit ein Byte 10 Bit, und Windows wäre kein 16 oder 32 Bit-System, sondern ein 10 oder 100 Bit-System.
Im Rechner spielt sich alles in 2er Potenzen ab. [ironie]Aber diese blöden Araber mußten ja damals 10er-Fetischisten sein. Sonst wäre jetzt alles viel einfacher![/ironie]

_________________
We are, we were and will not be.