# N Primzahlen



## tatra-bennl (29. Dez 2014)

Hallo zusammen, ich hätte noch eine kurze Frage hierzu. Es hat nicht direkt etwas mit dem Sieb des Eratosthenes zu tun, sondern allgemein mit der Ausgabe der ersten n Primzahlen. Ich wollte jedoch einen zusätzlichen Thread vermeiden...

Also ich wollte gerade ein kleines Programm schreiben, das mir die ersten n Primzahlen ausgibt. Algorithmus lautet wie folgt:
Überprüfe jede Zahl i auf Teilbarkeit mit sämtlichen Zahlen, die kleiner gleich i/2 sind. Wenn Rest 0, dann teilbar, also keine Primzahl. Wenn nicht Rest 0, dann nicht teilbar, also Primzahl.

Die "gefundenen" Primzahlen_ i_ wollte ich dann in ein Array _a_ packen, um schließlich die ersten n Primzahlen, d.h. die Werte a[0] bis a[n-1], auszugeben.


```
public class Primzahlen {

	public static void main(String[] args) {
		
		
		int n = Integer.parseInt(args[0]);  //Ausgabe bei n=3: 2,3,5
		
		for (int i=2; ; i++) {
			
			boolean istprim = true;
			
			for (int x=2; x<=(i/2) && istprim; x++) {
				
				if (i%x == 0)	istprim = false;
			}
			
			if (istprim) {
				
				int a [] = new int [n];
				a [x] = i;                      
                               // ??? Hier wollte ich eine for-Schleife unter x von 0 bis n-1 einbauen, hat
                               // aber nix gebracht...
				
			System.out.println(i);
			
			}
		}
	}

}
```
Das Programm läuft bei mir unendlich weiter (wegen der infinite-loop ganz oben...).
Hat jemand eine Idee, wie ich dem Programm mitteile, an der n-ten Stelle zu stoppen?

Die for-Schleife habe ich deswegen "infinite" laufen lassen, weil die Grenze ja unbekannt ist, d.h. die Schleife soll theoretisch schon bis zu einer unendlich hohen Grenze weiterlaufen, aber eben nach der n-ten Primzahl abbrechen.


----------



## Flown (29. Dez 2014)

So ich hab das mal in einen neuen Thread verschoben, da es eine Eigenständige Frage ist und nichts mit dem Sieb des Erastothenes zu tun hat!


----------



## stg (29. Dez 2014)

Mal unabhängig davon, dass man das Problem sicherlich effizienter lösen könnte, als es dein momentaner Algorithmus macht ... 

Aber um direkt einfach (nur) auf deine Frage zu antworten: Baue eine entsprechende Abbruchbedingung in deine Schleife ein! Lasse einen Zähler mitlaufen, den du erhöhst, sobald eine Primzahl gefunden wurde. Bei der gewünschten Anzahl greift dann die Abbruchbedingung.

In etwa so:

```
for (int i=2, int anzahl = 0; anzahl<=max; i++) {
  // ..
  if(istprim) {
    // ...
    anzahl++;
  }
}
```
Dabei zählt anzahl die gefundenen Primzahlen und max steht für die maximale Anzahl an Primzahlen, die du finden willst.


----------

