Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Sieb des Eratosthenes
Yaddle - Fr 23.12.11 16:35
Titel: Sieb des Eratosthenes
Hallo ich habe ein Programm geschrieben, welches alle Primzahlen bis zu einer bestimmten Zahl ausgibt. Dafür habe ich eine Klasse namens Field erstellt, die aus einer Integerzahl und einem boolschen Wert pro Variable besteht. In einem Array angeordnet kann ich dann alle nicht Primzahlen ausschließen. Das ganze läuft nach dem Prinzip des Siebes des Eratosthenes. Ich habe jetzt das Problem, dass die Ausgabe "abgeschnitten" wird wenn das Maximum 2000 nähert. Im Array sind die Stellen aber trotzdem als prim vermerkt kann mir jemand den Fehler nennen? Oo
Die Klasse:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| class Field { int number; bool prim; public Field(int number,bool prim) { this.number = number; this.prim = prim; } public Field Cross() { if (this.prim) { return new Field(this.number, false); } return this; } public override String ToString() { return this.number.ToString() + ", " + this.prim.ToString(); } public int Number { get{ return this.number; } set{ this.number = value; } } public bool Prim { get { return this.prim; } set { this.prim = value; } } } |
Das Programm bzw. die Main-Funktion:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| class Program { static void Main(string[] args) { const int limit = 2000; Field[] AllNumbers = new Field[limit - 1]; for (int i = 0; i < limit - 1; i++) { AllNumbers[i] = new Field(i + 2, true); } for(int i = 0; i < limit -1; i++) { int divisor; if (AllNumbers[i].Prim) { divisor = AllNumbers[i].Number; for (int j = divisor; j < limit - 1; j++) { if (AllNumbers[j].Number % divisor == 0) { AllNumbers[j] = AllNumbers[j].Cross(); } } } } foreach(Field f in AllNumbers) { if (f.Prim) { Console.WriteLine(f.Number); } } Console.ReadLine(); } } |
Wäre toll, wenn einer von euch die Lösung für das Problem wissen würde..
Greetz und Frohes Fest
Moderiert von
Kha: C#-Tags hinzugefügt
jaenicke - Fr 23.12.11 17:17
Das ist abhängig von den Systemeinstellungen des Nutzers (Rechtsklick auf die Titelleiste deines Konsolenfensters --> Eigenschaften). Man kann einstellen wie viele Zeichen in der Höhe und Breite gespeichert werden sollen:
Eine Konsolenanwendung ist an der Stelle schlicht nicht sinnvoll, wenn alle Ergebnisse angezeigt werden sollen. Wenn das gewünscht ist, solltest du z.B. eine Windows Forms Anwendung erstellen und die Zahlen in einer TextBox ausgeben.
Th69 - Fr 23.12.11 18:01
Alternativ kannst du die Konsolenanwendung direkt starten und die Ausgabe in eine Datei lenken:
Quelltext
1:
| prims.exe >primzahlen.txt |
Yaddle - Fr 23.12.11 18:37
Vielen Dank :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!