Javakurs/Übungsaufgaben/Primzahlenaufgabe/Musterloesung: Unterschied zwischen den Versionen
< Javakurs | Übungsaufgaben | Primzahlenaufgabe
Jörg F (Diskussion | Beiträge) K (hat „Javakurs2007/Primzahlenaufgabe/Musterloesung“ nach „Javakurs/Übungsaufgaben/Primzahlenaufgabe/Musterloesung“ verschoben: wikistruktur) |
(Optimierte Primzahllösung ersetzt) |
||
Zeile 37: | Zeile 37: | ||
== Lösung: Optimierter Primzahlfinder == | == Lösung: Optimierter Primzahlfinder == | ||
− | import java.util.Scanner; | + | /** |
− | public class | + | * @author Theresa (theresa@freitagsrunde.org) |
− | + | * | |
− | + | */ | |
− | + | ||
− | + | import java.util.Scanner; | |
− | + | public class PrimzahlenOptimiert { | |
− | + | ||
− | + | public static void main(String[] args) { | |
− | + | int biswieviel, von; // Obere und untere Grenze der Primzahlkandidaten | |
− | + | int i, n; // Variablen fuer aktuellen Primzahlkandidaten und aktuellen Teiler | |
− | + | ||
− | + | System.out.println("Bitte geben Sie den Bereich an, in dem alle Primzahlen berechnet werden sollen."); | |
− | + | Scanner tastatur = new Scanner(System.in); | |
− | + | System.out.print("Primzahlen von?"); | |
− | + | // Lies die erste eingegebene Zahl | |
− | + | von = tastatur.nextInt(); | |
− | + | System.out.print("bis?"); | |
− | + | // Lies die zweite eingegebene Zahl | |
− | + | biswieviel = tastatur.nextInt(); | |
− | + | ||
+ | for (i = von; i <= biswieviel; i++ ) { | ||
+ | n = 2; | ||
+ | |||
+ | // Schleife ueber alle moeglichen Teiler n des Primzahlkandidaten i: | ||
+ | while (i % n != 0 && n <= i/2) { | ||
+ | // Erhoehe n solange, wie i nicht nurch n teilbar ist und die Obergrenze noch nicht erreicht ist | ||
+ | n = n + 1; | ||
+ | } | ||
+ | |||
+ | // Falls die Schleife bis zur Obergrenze i/2 durchlaufen wurde: | ||
+ | if (n >= i/2 + 1 && i != 1) { | ||
+ | System.out.println(i + " ist eine Primzahl."); | ||
+ | } | ||
+ | // andernfalls wurde die Schleife vorher abgebrochen, weil i durch n teilbar war -> keine Primzahl | ||
+ | } | ||
} | } | ||
− | + | } | |
− | |||
− | |||
− | |||
− | } | ||
== Kommentare == | == Kommentare == |
Version vom 6. März 2012, 16:18 Uhr
Hinweis: Die Musterlösung kann von eurer Lösung abweichen, da es immer mehrere Varianten gibt ein Problem zu lösen. Im Zweifelsfall Fragt einen Tutor.
Lösung: Einfacher Primzahlfinder
/** * @author Andy Gunschl (Freitagsrunde) * */ public class Primzahl { public static void main(String[] args) { //Grenze bis zu der Primzahlen gesucht werden int n = 10; //beginne bei der Zahl 2 da 1 keine Primzahl ist for(int i=2;i<=n;i++){ //isPrimzahl ist ein Wahrheitswert, um zu überprüfen ob wir eine Primzahl gefunden haben. //falls nicht wird sie später auf false gesetzt. boolean isPrimzahl = true; //i durch jede Zahl kleiner als i zu teilen und zu überprüfen, ob ein Rest übrig bleibt. //BSP. im wiki 25=i und j wäre die Variable die hochgezählt wird for(int j=2;j<i && isPrimzahl;j++){ //Wenn eine division als rest 0 hat dann ist die Zahl keine Primzahl //und somit ist isPrimzahl auf false zu setzten if((i%j)==0){ isPrimzahl = false; } } //gib eine Meldung aus falls es sich um eine Primzahl handelt. if(isPrimzahl){ System.out.println(i+" ist eine Primzahl!"); } } } }
Lösung: Optimierter Primzahlfinder
/** * @author Theresa (theresa@freitagsrunde.org) * */ import java.util.Scanner; public class PrimzahlenOptimiert { public static void main(String[] args) { int biswieviel, von; // Obere und untere Grenze der Primzahlkandidaten int i, n; // Variablen fuer aktuellen Primzahlkandidaten und aktuellen Teiler System.out.println("Bitte geben Sie den Bereich an, in dem alle Primzahlen berechnet werden sollen."); Scanner tastatur = new Scanner(System.in); System.out.print("Primzahlen von?"); // Lies die erste eingegebene Zahl von = tastatur.nextInt(); System.out.print("bis?"); // Lies die zweite eingegebene Zahl biswieviel = tastatur.nextInt(); for (i = von; i <= biswieviel; i++ ) { n = 2; // Schleife ueber alle moeglichen Teiler n des Primzahlkandidaten i: while (i % n != 0 && n <= i/2) { // Erhoehe n solange, wie i nicht nurch n teilbar ist und die Obergrenze noch nicht erreicht ist n = n + 1; } // Falls die Schleife bis zur Obergrenze i/2 durchlaufen wurde: if (n >= i/2 + 1 && i != 1) { System.out.println(i + " ist eine Primzahl."); } // andernfalls wurde die Schleife vorher abgebrochen, weil i durch n teilbar war -> keine Primzahl } } }
Kommentare
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)