[Java] Primzahlen berechnen/ Math.srqt...

04/15/2014 20:04 Belur#1
Hey,

sollte eine Methode schreiben zum Primzahlen berechnen.

Hab mir das so vorgestellt:
PHP Code:
import java.lang.Math;


public class 
Primzahlen {

    public static 
void main(String[] args) {
        
int start 0;
int ende 100;


    
for(
int i=starti<=endei++){
    for(
int j 2j<=Math.sqrt(i); j++){
        if(
i%j==0){
            if(
j==i){
                
System.out.println(i);    
            }else{
                break;
            }        
            }
        }        
    }    
}

Sooo. Da man ja in der zweiten For-Schleife eigentlich nicht weiter als bis zu Wurzel von "i" gehen muss, hab ich die Wurzel da reingepackt. Geht aber nicht. Kommt keine Ausgabe.

Wenn ich das Math.sqrt rausnehme, dann läuft es problemlos.
Hab schon versucht die Variablen als Double zu nehmen, was aber auch nichts brachte.

Vllt kann mir da jmd helfen.

Grüße


#edit: Gefunden. Dummer Fehler, hätte ich früher sehen können.
04/15/2014 20:37 ​Tension#2
Wie kommst du auf Wurzel?

Quote:
Jede Zahl lässt sich in ihre Primfaktoren zerlegen. Diese Primfaktoren (=Primzahlen) sind nur durch 1 und sich selbst teilbar. Um zu prüfen, ob eine Zahl eine Primzahl ist, musst du also jede unter der Zahl liegende Primzahl prüfen. Am besten fängt man natürlich erst mal mit den Kleinsten an (2,3,5,7,11).
Code:
int start = 0;
int ende = 100;
int i, j;
for (i = 2; i <= ende; i++)
{
	j = (i - 1);
	while (i%j) {
		j--;
	}
	if (j == 1) {
		System.out.println(i);
	}
}
wäre meine unschöne Lösung.
04/15/2014 21:01 Zunft#3
Wieso benutzt du nicht das Sieb des Eratosthenes? Das ist einfacher und effizienter als immer wieder die Wurzel zu ziehen bzw. zu dividieren:

[Only registered and activated users can see links. Click Here To Register...]

Code:
    public static boolean[] getPrimzahlen(int maxValue) {
        if (maxValue < 2) {
            maxValue = 2;
        }
        boolean[] isPrim = new boolean[maxValue + 1];
        for (int i = maxValue; i >= 2; i--) {
            isPrim[i] = true;
        }
        for (int i = 2; i * i <= maxValue; i++) {
            if (isPrim[i]) {
                int nextNotPrim = i+i;
                while (nextNotPrim <= maxValue) {
                    isPrim[nextNotPrim] = false;
                    nextNotPrim += i;
                }
            }
        }
        return isPrim;
    }
04/15/2014 21:02 Belur#4
Danke schonmal. Hatte meinen Fehler grad auch noch gesehen.

Mit der Wurzel kann ichs grad garnicht beschreiben. Ich weiß es nur noch aus der Vorlesung.
04/15/2014 21:12 Zunft#5
Quote:
Originally Posted by ​Tension View Post
Wie kommst du auf Wurzel?
Quote:
Originally Posted by Belur View Post
Mit der Wurzel kann ichs grad garnicht beschreiben. Ich weiß es nur noch aus der Vorlesung.


[Only registered and activated users can see links. Click Here To Register...]

Da ein Quadrat immer auch ein Vielfaches ist, kannst du indem du die Wurzel ziehst prüfen welchen Wert der größte Vielfache hat.
04/15/2014 21:28 ​Tension#6
Hätte meine Frage etwas besser Ausdrücken sollen, meinte eigentlich wieso er da eine Wurzel verwenden will wenn der Rest schon stimmt. Mein Fehler :)