mbbm
14-01-2013, 14:44
Hallo zusammen,
ich versuche gerade das Sieb des Eratosthenes mit wxMaxima zu programmiern, allerdings funktioniert das Ganze noch nicht so richtig. Hier mein Lösungsweg:
Ich definiere zuerst eine Matrix mit Einträgen von 2 bis z.B. 100 und die Auswertung erfolgt mittels dem folgenden Code:
for j thru length(A) do
(
p:true,
for k from j+1 thru length(A) do
(
if integerp(A[k]/A[j]) then p:false,
if p=false then
A: delete(A[k],A)
)
);
Die Idee von mir war folgende: Mit der ersten Schleife, wähle ich nach der Reihe ein Element der Matrix aus und mittels der zweiten Schleife werden die restlichen Matrixeinträge ausgewählt. Nun dividiere ich die Elemente der zweiten Schleife, durch das der ersten. Sollte der Quotient den Datentyp integer haben, wird der k-te Eintrag aus der Matrix gelöscht.
Nur leider funktioniert das Ganze nicht so richtig, denn ich erhalte für die Primzahlen von 1 bis 100 folgende Ausgabe: [2,3,5,7,11,19,27,43,59,75,91].
Erkennt ihr wo mein Fehler liegt?
mfg
ich versuche gerade das Sieb des Eratosthenes mit wxMaxima zu programmiern, allerdings funktioniert das Ganze noch nicht so richtig. Hier mein Lösungsweg:
Ich definiere zuerst eine Matrix mit Einträgen von 2 bis z.B. 100 und die Auswertung erfolgt mittels dem folgenden Code:
for j thru length(A) do
(
p:true,
for k from j+1 thru length(A) do
(
if integerp(A[k]/A[j]) then p:false,
if p=false then
A: delete(A[k],A)
)
);
Die Idee von mir war folgende: Mit der ersten Schleife, wähle ich nach der Reihe ein Element der Matrix aus und mittels der zweiten Schleife werden die restlichen Matrixeinträge ausgewählt. Nun dividiere ich die Elemente der zweiten Schleife, durch das der ersten. Sollte der Quotient den Datentyp integer haben, wird der k-te Eintrag aus der Matrix gelöscht.
Nur leider funktioniert das Ganze nicht so richtig, denn ich erhalte für die Primzahlen von 1 bis 100 folgende Ausgabe: [2,3,5,7,11,19,27,43,59,75,91].
Erkennt ihr wo mein Fehler liegt?
mfg