Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Primfaktoren » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Primfaktoren
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Grisu
unregistriert
Primfaktoren Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.
09.12.2013 18:22
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
	*/
}


__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 09.12.2013 18:43.

09.12.2013 18:41 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Grisu
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.
09.12.2013 19:10
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Primfaktoren