Sieb des Eratosthenes
spacer
Autor Nachricht
Yaddle
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 23.12.11 16:35 
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:

ausblenden volle Höhe C#-Quelltext markieren
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:

ausblenden volle Höhe C#-Quelltext markieren
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 user profile iconKha: C#-Tags hinzugefügt
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15841
Erhaltene Danke: 741

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: 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.
Einloggen, um Attachments anzusehen!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 1807
Erhaltene Danke: 250

Win 2000, Win XP, Win7
C++, C# (VS 2005/08/10)
BeitragVerfasst: Fr 23.12.11 18:01 
Alternativ kannst du die Konsolenanwendung direkt starten und die Ausgabe in eine Datei lenken:
ausblenden Quelltext markieren
1:
prims.exe >primzahlen.txt
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Yaddle Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 23.12.11 18:37 
Vielen Dank :)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home