C Primfaktorzerlegung

TRBN

Cadet 2nd Year
Registriert
Nov. 2015
Beiträge
22
Hallo,
ich versuche gerade ein Programm zum Primfaktoren zerlegen zu programmieren.
die Zerlegung funktioniert auch schon.
Allerdings funktioniert das Zählen der anzahl der Primfaktoren nicht.
Sprich, wenn ein Faktor zweimal vorkommt, soll eine 2 dahinter stehen:
<3,2>
bei einem Faktor der nur einmal vorkommt soll es etwa so aussehen:
<56,1>

Ich hoffe ihr versteht was ich mein.
Jedenfalls hat mein Code 2 Probleme. Das Zählen funktioniert nicht, und mein Programm scheint in irgendeiner schleife gefangen zu sein.
Es gibt allerdings keine Fehlermeldung.
Hier mein Code:
Code:
int main(int argc, char** argv) {
    int x, i = 0, a = 2, anzahl = 0;
    printf("Bitte geben sie eine ganze Zahl ein: ");
    scanf("%d", &x);
    while (i != 1) {
        while (x % a != 0) {
            a++;
        }
        while (x % a == 0) {
            anzahl = 1;
            x = x / a;
            anzahl++;
        }
        printf("<%d,%d>\n", a, anzahl);
        if (x == a) {
            printf("<%d,%d>/n", a, anzahl);
            i = 1;
        } else {
            i = 0;
        }
    }
    return (EXIT_SUCCESS);
}

könnt ihr mir helfen, bei meinem Problem?
Vielen Dank schon mal im Vorraus

Gruß
Torben
 
Sorry, aber ich hab in dieser Zeile aufgehört zu lesen:
Code:
    int x, i = 0, a = 2, anzahl = 0;
Niemand will anhand von Quellcode erraten, was für einen Sinn Variablen haben - auch du selbst nicht wenn du einige Tage später auf dein eigenes Programm guckst. Also bitte entweder sprechende Variablennamen oder mindestens Kommentare hinter jede Variable.
Lesbarer Quellcode ist nichts, was man nur in großen Softwareprojekten oder in Produktiv-Software braucht.. gerade an so kleinen Projekten übt man solche wichtigen Dinge wie Lesbarkeit und Struktur. Die Zeit, die ein kurzes tippen spart verliert man beim Nachdenken und unnötigem Debuggen mehrfach.

Bitte sieh das nicht als persönliche Kritik.. aber wenn du Programmieren lernst, dann ist es wichtig solche Grundlagen früh zu verinnerlichen, weil es einfach sehr viel Zeit spart. Das ist anfangs wichtiger als irgendetwas funktionierend zu implementieren.
 
So müsste das aussehen:
Code:
int main(int argc, char** argv) {
    int x, i = 0, a = 2, anzahl = 0;
    printf("Bitte geben sie eine ganze Zahl ein: ");
    scanf("%d", &x);
    while (i != 1)
    {
        while (x % a != 0) 
        {
            a++;
            anzahl=1;   //Bei einem neuen Primfaktor fängt die Anzahl von neuem an zu zählen
        }
        while (x % a == 0) 
        {
            x = x / a;
            anzahl++;
        }
        printf("<%d,%d>\n", a, anzahl);
        if (x < a)   //wenn x kleiner als a ist, kann die Zahl nicht mehr zerlegt werden
        {
            printf("<%d,%d>/n", a, anzahl);
            i = 1;
        }
        else 
        {
            i = 0;
        }
    }
    return (EXIT_SUCCESS);
}
MfG Sippo
 
Habe es dank euch hinbekommen. Vielen Dank für eure Hilfe
 
Zuletzt bearbeitet:
Zurück
Oben