Primzahlenberechnung

preko

Erfahrenes Mitglied
Hi,

ich fange grad mit JAVA an und möchte eine Primzahlenberechnung programmieren (Performance außen vor). Deshalb habe ich folgenden Code geschrieben:

Code:
public class Zahlen {

	public static void main(String[] args) {
						
		for(int start = 2; start <= 15; ++start) {		// Aufsteigender Zahlenlauf bis zur definierten Höhe
			//System.out.print(start);
			System.out.print("\n");
			
			for(int i = 2; i < start; ++i) {			// Aufsteigender Teiler bis max. Zahlenhöhe 
				//System.out.println(" / " + i);
				
				if(start % i == 0) {
					//System.out.println(start + "/" + i + " ist teilbar!");
					break;
				}
				else {
					System.out.println("            " + start + "(" + i + ") ist Prim!");
				}
				
			}

		}

	}

}

Dabei soll die Variable "start" von 2 aufwärts bis zum festgelegten Endwert ansteigen, bis zu dem man die Primzahlen berechnet haben möchte.

Die Variable "i" soll von 2 an bis max. dem Wert "start" ansteigen um zu prüfen, ob der Wert den "start" aktuell hat durch einen Wert zwischen 1 und "start" teilbar ist.

Nun bekomme ich weitestgehend das Ergebnis, welches ich haben möchte, allerdings gibt er mir bei tatsächlichen Primzahlen die Primzahl mit allen Teilberechnungen aus (in der "else" Anweisung).
Ich möchte jedoch, dass er, wenn er feststellt, dass die Zahl eine Primzahl ist, nur die Primzahl ausgibt ohne alle "notwendingen" Berechnungen. Setze ich am Ende der "else"-Anweisung einen "break;"-Befehl, so bleibt der Wert "i" auf 2 und wird nicht hochgezählt.

Allerdings ist mir auch aufgefallen, dass z. B. die Zahl 45 fälschlicherweise als Primzahl deklariert wird. :-( Da muss also noch "der Wurm" drin sein...

Ich hoffe, ich habe halbwegs rüberbringen können, wo es "drückt". Was muss ich ändern, damit die Ausgabe entsprechend passt?

Vielen Dank im voraus!
 
Zuletzt bearbeitet:
Hi

du gibt für jede prüfende Zahl für jeden geprüften Teiler
schon die Entscheidung prim ja/nein aus.

Du hast eine äußere for-Schleife (die start zählt) und eine innere (mit i).

Mach vor Beginn der Inneren zB. ein
Java:
boolean teilbar = false;

In der inneren Schleife dann diese Variable auf true setzen,
wenn ein Teiler gerade gefudnen wurde (bei mehreren Teilern
setzt man sie mehrmals auf true, aber das ändert ja nichts daran,
dass sie bei min. einem Teiler dann true ist).

Nach der inneren Schleife dann anhand vom Variablenwert ausgeben, ob prim oder nicht.
 
Besten Dank!

Habe es jetzt entsprechend angepasst:
Code:
public class Zahlen {

	public static void main(String[] args) {

		boolean teilbar = false;
						
		for(int start = 2; start <= 50; ++start) {		// Aufsteigender Zahlenlauf bis zur definierten Höhe

			for(int i = 2; i < start; ++i) {			// Aufsteigender Teiler bis max. Zahlenhöhe 
				
				if(start % i == 0) {
					break;
				}
				else {
					teilbar = true;
					if (teilbar == true) {
						System.out.println(start);
						break;
					}
				}
			}

		}

	}

}

Allerdings besteht immer noch das Problem, dass z. B. die Zahl 45 ausgegeben wird, die jedoch mit 3, 5 und 15 teilbar ist, sprich keine Primzahl ist. Wo habe ich da den Fehler in der Logik? :confused:
 
Zurück