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!
-
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.
-
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 1Das 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++; } } }