Mathematik online lernen im Mathe-Forum. Nachhilfe online
Startseite » Forum » Eine Maple Aufgabe lösen - Goldbachsche Vermutung

Eine Maple Aufgabe lösen - Goldbachsche Vermutung

Universität / Fachhochschule

Sonstiges

Tags: Sonstiges

 
Antworten Neue Frage stellen Im Forum suchen
Neue Frage
Schurli

Schurli aktiv_icon

17:51 Uhr, 28.04.2014

Antworten
Schreiben Sie eine Prozedur, die die Goldbachvermutung testet. Eingabe soll eine natürliche Zahl n sein. Ist n ungerade oder nicht größer als 4, dann soll die Ausgabe "falsche Eingabe sein". Wenn n>4 gerade und Summe von zwei Primzahlen ist, soll die
Ausgabe true sein, und wenn n>4 gerade und nicht Summe von zwei Primzahlen
ist, soll die Ausgabe false sein. Verwenden Sie eine while-Schleife.

Zunächst mal meine (Programm-)Idee:
Ich erstelle eine Liste (Menge) aller Primzahlen bis zu diesem n. Und anschließend soll er jedes Element dieser Liste mit jedem anderen addieren. Dazu habe ich eine Doppewhileschleife verwendet um beide Summationsindizes laufen zu lassen. Kommt da das gewünschte n heraus, soll die Ausgabe "true" sein sonst eben "false".
Es ist zwar ein (mathematisch) primitives Programm, aber das wird wohl nicht angemeckert werden. Denn es ist sicherlich nicht einfach systematisch (ohne probieren) die Primzahl(summen)zerlegung einer geraden Zahl zu finden.

Ich bitte euch nun, mir zu sagen, was in meinem Programm nicht ganz stimmt. Es funktioniert nämlich nicht obwohl ich es schon probiert habe.

Wäre euch sehr dankbar.

Hier mein Programm:

Goldbachtest:=proc(n)
local a,b,i,j,M;
n:=900;
i:=n;
M:={};
while i>2 do
j:=prevprime(i)
i:=j;
M:= M union {i};
od;
if n = odd or n<=4 then
print("falsche Eingabe"); else
a=1; b=1;
while a<|M| do
b=1;
while b<|M| do
if M[a] + M[b] = n
then print("true")
else print("false");
fi;
b:=b+1;
end do;
a:= a+1;
end do;
fi;

Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert):
"Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen."
Online-Nachhilfe in Mathematik
Antwort
pwmeyer

pwmeyer aktiv_icon

19:09 Uhr, 28.04.2014

Antworten
Hallo,

was funktioniert denn nicht? Bricht das Programm mit einem SyntaxFehler ab oder liefert es einfach ein falsches Ergebnis?

Warum hast Du die Primzahlen als Menge gespeichert und nicht als Liste? Kann man dann trozdem noch mit M[a] in einer bestimmten Reihenfolge zugreifen?

Gruß pwm
Schurli

Schurli aktiv_icon

19:14 Uhr, 28.04.2014

Antworten
Hallo pwm,

das Problem ist, dass das Programm einfach nicht laufen will. Also offenbar eher ein Syntaxfehler, was natürlich einen Inhaltfehler logisch nicht ausschließt.

Stimmt, das sehe ich gerade. Es muss oben als Liste definiert werden.

Kennst du dich in maple aus oder betrachtest du das nur im Augen eines allgemeinen Programmierers? :-)

Also mit der Liste sieht es so aus:

Goldbachtest:=proc(n)
local a,b,i,j,M;
n:=900;
i:=n;
M:=[];
while i>2 do
j:=prevprime(i);
i:=j;
M[i]:= i;
od;
if n = odd or n<=4 then
print("falsche Eingabe");
else
a=1; b=1;
while a<|M|
do
b=1;
while b<|M|
do
if M[a] + M[b] = n
then print("true")
else print("false");
fi;
b:=b+1;
end do;
a:= a+1;
end do;
fi;
Antwort
pwmeyer

pwmeyer aktiv_icon

19:31 Uhr, 28.04.2014

Antworten
"Kennst du dich in maple aus oder betrachtest du das nur im Augen eines allgemeinen Programmierers? :-) " Halb-Halb :-)

Welche Maple-Version verwendest Du?

Jedenfalls ist jetzt die Besetzung der Liste falsch: Du nimmst als Listenindex i zugleich den Wert, nämlich die Primzahl. Du musst jede gefundene Primzahl an das Ende der Liste anhängen.

Lass Dir doch einfach mal die Liste M ausrucken, bevor Du damit arbeitest.

Gruß pwm
Schurli

Schurli aktiv_icon

19:43 Uhr, 28.04.2014

Antworten
Hallo pwm,

ich verwende maple 18.

In den Zeilen
j:=prevprime(i)
i:=j;
M[i]:= i;

wird ja jede neu gefundene (kleinere) Primzahl der Liste angehängt.

Aber die Doppelschleife dürfte logisch korrekt sein, oder? Ich sah dies als einzige Möglichkeit um die k^2 Operationen durchzuführen (wobei k=|M|).
Antwort
pwmeyer

pwmeyer aktiv_icon

09:11 Uhr, 29.04.2014

Antworten
Hallo,

mir ist noch aufgefallen, dass Du n zweifach verwendest: Es soll der Parameter n sein, der getestet wird und an das Unterprogramm übergeben wird und gleichzeitig setzt Du n:=900 im Unterprogramm?

Nochmal mein Rat: Teste zunächst nur die Erzeugung von M und lass Dir M ausdrucken.

Gruß pwm
Frage beantwortet
Schurli

Schurli aktiv_icon

18:12 Uhr, 04.05.2014

Antworten
Lieber pwm,

mit deinen Tipps habe ich das Programm lösen können.

Vielen, vielen Dank dir für deine Unterstützung! :-)