Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Musterlösung vs meine lösung (http://www.informatikerboard.de/board/thread.php?threadid=2041)
Geschrieben von Tim0 am 02.01.2015 um 04:18:
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;
}
Geschrieben von Karlito am 02.01.2015 um 07:10:
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
Geschrieben von eulerscheZahl am 02.01.2015 um 07:15:
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]](http://www.matheboard.de/latex2png/latex2png.php?n = p \cdot q, &p \leq q)
. 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.
Forensoftware: Burning Board, entwickelt von WoltLab GmbH