Primfaktoren

Neue Frage »

Auf diesen Beitrag antworten »
Grisu Primfaktoren

Hi @all,

ich möchte eine Primfaktorzerlegung durchführen.
Das ganze möchte ich ohne eine break Anweisung durchführen und mit einer while Schleife und Rekursiv. zurückgegeben werden soll ein String, der die primfaktorzerlegung enthält.

mein Code dazu sieht folgendermaßen aus:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
public static String teilen(int n){
    String s=""; //String initialisieren
    int p=2;  //den kleinsten Primfaktor wählen

*/solange n mod p nicht 0 ist soll p hochgezählt werden, ich erhalte dann das kleinste p, für das gilt n mod p=0*/

    while((n%p!=0)&&(p*p<=n)){ 
        p=p+1;
    }
    s=p+"*"+teiler(n/p); //erneutes Ausführen der Funktion mit n/p
    if(p*p>n){
        s=s+n;
    }
    return s;


So, das sollte soweit eigentlich laufen, denke ich, tut es aber nicht....

Vielen Dank.
 
Auf diesen Beitrag antworten »
eulerscheZahl

Nah dran.

1.: du nennst die Funktion teilen, willst dann aber die Funktion teiler aufrufen
2.: s=p+"*"+teiler(n/p); wird immer ausgeführt, auch wenn du schon fertig bist:
eine Kontrollausgabe liefert für n = 360 als Wert, mit dem teilen() aufgerufen wird:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
360
180
90
45
15
5
1
0
0
0
0
...


Ich habe es für dich behoben:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
public class Main {

	 public static String teilen(int n){
		    String s = ""; //String initialisieren
		    int p = 2;  //den kleinsten Primfaktor wählen

			while((n % p != 0) && (p * p <= n)){ 
		        p = p + 1;
		    }
		    if(p * p <= n)
		    	s = p + "*" + teilen(n / p); //erneutes Ausführen der Funktion mit n/p
		    else
		        s = s + n;
		    return s;
	 }
	 
	public static void main(String[] args) {
		System.out.println("360=" + teilen(360));
		System.out.println("37=" + teilen(37));
	}

	/*
	360=2*2*2*3*3*5
	37=37
	*/
}
Auf diesen Beitrag antworten »
Grisu

Dann mal wieder ein dickes Dankeschön.

Sind eigentlich immer ziemlich dusselige Fehler....
die Funktionen haben in meinem Quelltext den selben Namen, war ein Tippfehler im Board.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »