Musterlösung vs meine lösung

Neue Frage »

Auf diesen Beitrag antworten »
Tim0 Musterlösung vs meine lösung

Hallo,
Das ist die Musterlösung:
public static boolean istPrim
(int n) {
// moegliche
Teiler liegen im Bereich 2 bis n/2 (abgerundet)
for (int zaehler = 2; zaehler <= n / 2; zaehler++) {
if (n % zaehler == 0) {
return false;
}
}
return true;
}
an der stört mich das return false in der for schleife

Meine Lösung sieht so aus

public static boolean istPrim(int n) {
boolean a= true;
for (int zaehler = 2; zaehler <= n / 2; zaehler++) {
if (n % zaehler == 0) {
a= false;
break;
}
}
return a;
}
 
Auf diesen Beitrag antworten »
Karlito

Beide Lösungen haben Vor- und Nachteile. Bei der Musterlösung kann einfach nichts mehr mit dem Ergebnis passieren. Wäre die Funktion komplexer, dann könnte bei einer zukünftigen Wartung ein Programmierer das Ergebnis bei deiner Version nach der Schleife noch verfälschen, obwohl es eigentlich schon fest steht.
Deine Version hat den Vorteil, dass sie einen zentralen Punkt hat, an dem das ergebnis fest steht und ausgegeben wird. Ich persönlich bevorzuge auch meist diese Variante. Eine genaue Begründung dafür kann ich leider nicht liefern. Das ist eher eine intuitive Entscheidung. Muss man die zweite Variante jedoch debuggen, so muss man immer den gesamten Kontrollfluss nachvollziehen...

Gruß,

Karlito
Auf diesen Beitrag antworten »
eulerscheZahl

Mich stört etwas ganz anderes:
Zitat:
Teiler liegen im Bereich 2 bis n/2 (abgerundet)

Das ist zwar richtig, interessiert aber nicht. Wichtig ist nur der kleinste Primfaktor. Hat man den gefunden, kann man bereits abbrechen. Sei [latex]n = p \cdot q, &p \leq q[/latex]. Es reicht aus, die Existenz dieses p zu beweisen (oder zu widerlegen), um zu sagen, ob die Zahl prim ist.

Folglich: for (int zaehler = 2; zaehler * zaehler <= n; zaehler++). Das reduziert die Rechenzeit deutlich.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »