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:
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:
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