# Primzahlen berechnen



## java1986 (8. Jan 2015)

Hallo,
ich bin ziemlich neu in der Java Programmierung.
Ich muss ein Programm schreiben, dass eine vorgegebene Anzahl von Primzahlen berechnet.
D.h. ich sollte berechnen, dass z.B. die vierte Primzahl die 7 ist.

Hier hab ich schonmal ein Quelltext zum berechnen der Primzahlen. Weiter komm ich allerdings nicht. Ich hoffe mir kann jemand helfen. 
	
	
	
	





```
public class Primzaheln {

	public static void main(String[] args){
		int zahl;
		int limit = 20;
		int teiler;
		int zaehler;
		
		for(zahl = 1; zahl <= limit; zahl++){
			if(zahl != 1){
				teiler = 0;
				for(zaehler = 1; zaehler <= zahl; zaehler++){
					if(zahl % zaehler == 0) {
						teiler++;
					}
				}
				
			if (teiler == 2)
				System.out.println(zahl);	
			}
			
		}
	}
}
```


----------



## Flown (8. Jan 2015)

Was ist dein konkretes Problem?


----------



## java1986 (8. Jan 2015)

Ich weiß nicht, wie ich das Programm umschreiben muss, damit ich sagen kann, es soll genau 5 Primzahlen berechnen und dann die fünfte ausgeben


----------



## Flown (8. Jan 2015)

Also du kannst auf jedenfall dein Problem in zwei Schritten berechnen:

1. Schritt: Die Prüfung einer Zahl auf prim-Eigenschaft

Pseudo:

```
for i from 2 to sqrt(n):
  if(n % i == 0) then return false
end for
return true
```

2. Schritt berechnen der n-ten Primzahl

Pseudo:

```
number = 2
prime = -1
primeNr = 0
while(primeNr < n) then
  if(number prime?) then
    prime = number
    increment(primeNr)
  end if
  increment(number)
end while
return prime
```


----------



## java1986 (8. Jan 2015)

danke schonmal für deine Antwort. Ich muss mir das mal genauer anschauen. So auf die schnelle versteh ich noch nicht viel.


----------



## java1986 (8. Jan 2015)

ich versteh's nicht :noe:


----------



## Tarrew (8. Jan 2015)

Der Pseudo-Code von Flown ist eig. schon sehr gut.

Aber ok, ich gehe mal davon aus, dass dein bestehender Code jetzt funktioniert.
Dazu definierst du noch ein int n;
Für n=1 wird die erste, für n=2 die zweite, für n=3 die dritte Primzahl berechnet usw. 

Dann kannst du deine äußerste for-Schleife auch einfach ändern:


```
for (limit= 0; limit < n; zahl++) {
... /dein bestehender Code
```

limit ist jetzt ein bisschen umfunktioniert. Jedes mal, wenn du eine Primzahl gefunden hast inkrementierst du limit. 

Vielleicht kommst da ja jetzt drauf, was dann die n-te Primzahl ist.


----------



## java1986 (9. Jan 2015)

Danke Tarrew, 
dein Code versteh ich besser aber so kommt bei mir eine Endlosschleife raus.


----------



## Tarrew (9. Jan 2015)

Die Schleife bricht ab, wenn limit = n ist. Wenn du eine Primzahl gefunden hast, musst du also limit++ rechnen. 
Machst du das auch?


----------



## java1986 (9. Jan 2015)

ja hab ich, aber wenn ich dann für n z.B. 10 hab, bricht die Schleife bei der Primzahl 7 ab. Sie soll ja aber bei 29 abbrechen.
Vielleicht versteh ich's auch grad einfach nicht


----------



## Tarrew (9. Jan 2015)

Ich vermute das liegt daran, dass du die geschweiften Klammern nicht gesetzt hast:

```
int zahl = 0;
		int limit;
		int teiler;
		int zaehler;
		int n = 10;

		for (limit = 0; limit < n; zahl++) {
			if (zahl != 1) {
				teiler = 0;
				for (zaehler = 1; zaehler <= zahl; zaehler++) {
					if (zahl % zaehler == 0) {
						teiler++;
					}
				}

				if (teiler == 2) {
					System.out.println(zahl);
					limit++;
				}
			}

		}
		System.out.println(n + ". Primzahl ist: " + //hier musst du nochmal nachdenken);
	}
```

Du musst dir nur überlegen, welche Zahl der n-te Primzahl ist, nachdem die Schleife abbricht.


----------



## java1986 (9. Jan 2015)

Danke, jetzt hab ich's auch


----------



## Tarrew (9. Jan 2015)

Trotzdem würde ich deinen Algorithmus nochmal an den Pseudocode von Flown anpassen.
Dein Code ist durchaus verbesserungswürdig


----------



## java1986 (9. Jan 2015)

Ich werde es versuchen  wäre aber durchaus eine gute Übung


----------

