Primfaktoren zerlegen (Verzweigungen, Schleifen)



  • Hallo,
    ich bin ein Frischling in C/C++. Ich verzweifle gerade an einer Aufgabe. Das Programm soll eine eingelesene Zahl x in Primfaktoren zerlegen z.B. 60 = 2*2*3*5. Es soll zudem nur die Anzahl der Primfaktoren anzeigen, also in diesem Fall 4. Soweit bin ich schon gekommen. Ich muss das jedoch von der 2 bis zur Zahl x machen. Ich soll das nur mit Verzweigungen bzw. Schleifen machen.

    #include <iostream>
    #include <stdio.h>
    
    using namespace std; 
    int main() { 
    	int zahl;
    	int count = 0;
    	int c = 1;
    
    	cout << "Zahl "; 
    	cin >> zahl; 
    
    	for (int i=2; i <= zahl; i++) 
    	{  
    		while(c<zahl)
    		{
    			c++;
    			cout << c << " " << count << endl; 
    
    		}
    		while(zahl % i == 0)  
    		{    
    			zahl /= i;
    			count++;
    		}
    
    	} 
    }
    

    Ich würde mich über eine Erklärung freuen!
    MfG!


  • Mod

    Was soll das c sein?



  • Das c soll bis zur eingelesenen Zahl x gehen. Z.B. mein x ist 10 und das c soll von 2 bis zur 10 gehen und dabei die primfaktoren anzeigen.


  • Mod

    duccibreezy schrieb:

    Das c soll bis zur eingelesenen Zahl x gehen. Z.B. mein x ist 10 und das c soll von 2 bis zur 10 gehen und dabei die primfaktoren anzeigen.

    Passt diese Angabe denn zum Code, wo die Schleifen hintereinander stehen? Oder wo du später das c komplett ignorierst?



  • Ich weiss nicht mal, ob die Reihenfolge richtig ist. Wenn ich in meinem Compiler z.B. eine 10 eingebe, dann wird die 2 bis zur 10 in der linken Spalte ausgegeben und die Primfaktoren auf der rechten. Das Problem ist, die Primfaktoren zwischen den Zahlen 2 bis 10 werden nicht richtig angezeigt. Bei 10 sollte eine zwei stehen, da wird allerdings nur nullen angezeigt.



  • Ich würde mal klein anfangen und nur versuchen die eingegebe Zahl korrekt in ihre Primfaktoren zu zerlegen. Danach kannst du das Programm immer noch um eine Schleife für die Zahlen 2 bis zur Zahl erweitern.

    Versuch mal den Ablauf deines Programms zu analysieren. Für mich steht da folgendes:
    For-Schleife
    -> dient dazu alle Zahlen bis zum eingegeben Wert zu durchlaufen
    (Anmerkung: macht sie aber nicht korrekt da der Wert zahl (Bedingung) in der While-Schleife verändert wird)

    1te While-Schleife
    -> erhöhe c um 1 und gib Wert c sowie count (0) auf dem Bildschirm aus
    -> mach dies solange c < zahl (59x)

    2te While-Schleife
    -> mach nur was wenn zahl (aktuell 60) Modulo i (aktuell 2) keinen Rest ergibt
    -> neuer Wert zahl ist nach 1tem Durchlauf nur noch 30 (2ter: 15)
    -> erhöhe count um 1

    Das soll es mal gewesen sein mit dem Denkanstoß

    duccibreezy schrieb:

    #include <iostream>
    #include <stdio.h>
    
    using namespace std; 
    int main() { 
    	int zahl;
    	int count = 0;
    	int c = 1;
    	
    	cout << "Zahl "; 
    	cin >> zahl; 
    	
    	for (int i=2; i <= zahl; i++) 
    	{  
    		while(c<zahl)
    		{
    			c++;
    			cout << c << " " << count << endl; 
    
    		}
    		while(zahl % i == 0)  
    		{    
    			zahl /= i;
    			count++;
    		}
    		
    	} 
    }
    

Log in to reply