# Primzahl berechnen in Java



## sunny13 (8. Feb 2009)

Ich habe folgendes Programm:


```
import java.util.Scanner;

public class Primzahl {
	public static void main(String[] args) {

		Scanner myscan = new Scanner(System.in); // Scanner definieren

		int summe = 0;
		int i = 1;
		int p;
		System.out.println("Bitte geben Sie eine beliebige Zahl ein!!");
		int zahl = myscan.nextInt(); // beliebige Zahl-Eingabe

		do { // do while Schleife
			
			if(zahl < 2) {
				break; //aus der do-while-Schleife raus springen
			}
			
			p = zahl % i; // modulo : eingegeben Zahl mod i
			if (p == 0) {
				summe = summe + i;
			}
			i++;
		} while (i < zahl);

		if (summe == 1) {
			System.out.println("ist Primzahl");
		}

		else {
			System.out.println("ist keine Primzahl");
		}

	}// Hauptprogramm
}// class
```
Kann mir einer folgenden Programmteil erklären?
                                p = zahl % i; // modulo : eingegeben Zahl mod i
		if (p == 0) {
			summe = summe + i;
		}
		i++;
	} while (i < zahl);

	if (summe == 1) {

Wäre echt super.Weil da komme ich nicht weiter...


----------



## SlaterB (8. Feb 2009)

kannst du erklären, inwiefern du da nicht weiterkommst?

kennst du modulo?, 
weißt du, wass es über zwei Zahlen x und y aussagt, wenn x % y gleich 0 ist?

vielleicht wenn du noch dazu bedenkst, worum es in diesem Programm ungefähr geht?


----------



## sunny13 (8. Feb 2009)

Ja, modulo ist mir bekannt.
z.B. 7 mod 2  Rest 1 (7:2=3 rest 1)

Oben wurde i=1 deklariert. Aber es sind ja alle Zahlen durch 1 teilbar. Also ist so p immer = 0, oder habe ich da einen Denkfehler?


----------



## SlaterB (8. Feb 2009)

es gibt eine Zeile i++;
also wird i ständig erhöht,

alle i werden durchprobiert, in der summe bestimme Fälle gemerkt, 
am Ende geprüft, ob summe größer 1 ist,

das scheint mir recht logisch, muss ich doch noch genauer werden?


----------



## sunny13 (8. Feb 2009)

Wenn es geht noch genauer.
Und was hab die Zeile 
Summe=summe+i dann auf sich?


----------



## SlaterB (8. Feb 2009)

summe wird um i erhöht, 

eine Zahl ist am Ende genau dann eine Primzahl, wenn summe 1 ist, wenn also die Zahl nur durch 1 teilbar ist (durch zahl selber wird nicht geteilt)

ist die Zahl noch durch irgendwas anderes teilbar, so wird summe weiter erhöht, ob nun um 1, um i oder um 559879 ist fast schon egal
jedenfalls ist dann am Ende summe nicht genau 1


----------



## sunny13 (8. Feb 2009)

Ok. Dann ist es mir jetzt klar. 
Vielen Dank für die Mühe...


----------



## Landei (9. Feb 2009)

Dir ist schon klar, dass das so ziemlich die lahmste Implementierung ist, die es gibt (mal ausgenommen, einen Brainf*ck-Interpreter zu schreiben und den Primzahltest dann darin zu schreiben):
- man braucht nur die Teilbarkeit für alle Zahlen zu testen, die kleiner gleich der Wurzel der Ausgangszahl sind
- man braucht nur auf Teilbarkeit durch 2 und die ungeraden Zahlen zu testen


----------

