Ich bin ein völliger Neuling im Programmieren, also bitte Nachsicht wenn was gar nicht stimmt ;)
Ich hab euch hier mal meinen Lösungsvorschlag für den Primzahlentest - allerdings arbeitet er nicht sauber. Primzahlen erkennt er, bei "nicht-Primzahlen" spukt er jeweils 2x Nein aus.
Mir ist klar, dass er zwei mal auf die Anwendung stösst und daher das doppelte Ergebnis.
Ich hab mal probiert die oberste Anweisung wegzulassen, aber dann arbeitet er gar nicht mehr..?
Hat wer von euch einen Lösungsvorschlag dafür (am liebsten mit einfacher Erklärung)? Danke!
public void istPrimzahl(long n) {
//prüfe n Modulodivision m gleich null, wenn true gebe aus "NEIN"
//wenn false erhöhe m um 1 solange m < n
//wenn m = n breche ab und gebe aus "JA"
int m = 2;
{if ((n % m == 0) && (n != 2)) {
System.out.println("NEIN");
}
while ((m < n) && (n % m != 0)) {
m++;
}
if (m == n) {
System.out.println("JA");
}
if ((m < n) && (n % m == 0)) {
System.out.println("NEIN");
}
}
}
public static void main(String[] args) {
// Diese Variable kaennen sie veraendern, um Ihre
// Implementierung zu testen
int x = 20;
// Der nachfolgende Quelltext erzeugt nur die Ausgabe
System.out.print("Ist ");
System.out.print(x);
System.out.println(" eine Primzahl?");
new PrimzahlTester().istPrimzahl(x);
}
}
Comments
ChrissiLLB
Contributions on this page: 1
View profileMeine Lösung für den Algorithmus:
[ATTACH=full]8866[/ATTACH]
[ATTACH=full]8869[/ATTACH]
Beachte: Für m == n ist die while-Bedingung nicht erfüllt (weil n % n == 0 für alle 2 <= n), d.h. die Schleife bricht spätestens bei m == n ab.
Liebe Grüße
aras.abbasi
Contributions on this page: 1
View profileDu brauchst auch nur bis zur Hälfte der Zahlen auf Primzahlen prüfen ;). Also "einfach"
[CODE]int m = 2;
int maxIntegerToCheck = ((int) m/2) + 1
while (maxIntegerToCheck % m != 0)[/CODE]
Beispiel: bei der Primzahl 997 muss nur bis zur Zahl 499 (997/2 = 498.5) geprüft werden. Das verbessert die Performance der Funktion um 50% ;).
HCMBerater
Contributions on this page: 1
View profileDu brauchst nur bis zur Quadratwurzel der Zahlen (Math.sqrt(n)) prüfen! Das verbessert die Performance der Funktion um mehr als 75%
Frank Underwood
Contributions on this page: 2
View profileStimmt. Und wenn man den Zähler gleich um 2 erhöht, anstatt nur um 1, und geht es noch schneller.
userrr
Contributions on this page: 1
View profileHab das hier mal zusammengewurstelt für alle die es interessiert.
private static boolean istPrimzahl(int a) {
for (int i = 1; i<Math.sqrt(a); i+=2) {
if(a%i=0) return false;
}
return true;
}
public static void main(String[] args) {
for ( int i = 1; i<=500; i++) {
System.out.println(a+" "+istPrimzahl(a));
}
}
Frank Underwood
Contributions on this page: 2
View profileAu weia.
Auch wenn es hart klingt: Zusammengewurstelt trifft es, denn da stimmt ja so gut wie nichts. Syntaxfehler ( Variable a nicht deklariert in main, Falscher Vergleichsoperator und Variablentyp in istPrimzahl) sowie ungeeigneter Algorirthmus. Die einzige Primzahl, die gefunden wird, ist 1.